2012-07-31 86 views
0

我在我的onCreate方法中创建线程。我通过线程上的udp接收数据。由于某种原因,它不起作用。线程不是在android中创建

private void UdpThread() { 
// server will listen to one client 
    try 
    { 
     Thread udpServerThread = new Thread() 
     { 
      @Override 
      public void run() 
      {  
       Log.i("rrr","receivePacket3"); 
       try 
       { 
        while(true) 
        { 
         sleep(1000); 
        Log.i("rrr","receivePacket2"); 
        String[] recieved = null; 

        DatagramSocket clientSocket = null; 
        InetAddress IPAddress = null; 
        try { 

         IPAddress = InetAddress.getByName("localhost"); 
        } catch (UnknownHostException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
        byte[] receiveData = new byte[1500]; 
        DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); 
        try { 
         clientSocket = new DatagramSocket(8086); 
         Log.i("rrr","receivePacket"); 
         clientSocket.receive(receivePacket); 

         Log.i("rrr","receivePacket1"); 
        } catch (IOException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
        modifiedSentence = new String(receivePacket.getData()); 
        System.out.println("in client receive:" + modifiedSentence); 

        Log.i("Received data",modifiedSentence); 
        clientSocket.close(); 

        modifiedSentence = modifiedSentence.trim(); 
        Log.i("Received data",modifiedSentence); 
        } 
       } catch (Exception e){ 
        Log.e("UDP", "S: Error", e); 
       } 
      } 
     }; 
     udpServerThread.start(); 
     //udpServerThread.setPriority(Thread.MAX_PRIORITY); 

     Toast.makeText(this,modifiedSentence,Toast.LENGTH_LONG).show(); 

    }catch (Exception e) { 
     // TODO: handle exception 
     Log.e("eeeee",""+e); 
     e.printStackTrace(); 
    } 
} 

我该怎么做,当控制不立即从thread.and返回,并等待,直到数据没有收到。

+0

你是什么意思*“线程没有创建和控制跳转到敬酒”*? 'udpServerThread.start();'将启动线程并立即返回,而启动的线程并行运行,并且您的代码将继续执行到下一行。 – assylias 2012-07-31 11:13:11

+0

问题不完整(我只是修复了语言,拼写和格式),您还需要共享日志。 – Siddharth 2012-07-31 11:13:51

+0

@assylias然后为什么我没有通过udp获取数据,我已经在线程中编码。 – Rcp 2012-07-31 11:18:22

回答

0

与第二个线程中的主线程一起使用,我们必须在android中使用处理程序... ex。

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     new Thread(new Runnable() { 
      public void run() { 
      try{ 
       Message myMessage = new Message(); 
       myMessage.obj = "SEND ANY DATA"; 
      } 
      catch (JSONException e) { 
      e.printStackTrace(); 
      } 

      }).start(); 

和处理程序.....

private Handler finishHandler1 = new Handler() { 
     @Override 
     public void handleMessage(Message msg) { 
      // do the UI things.. 

     } 
    }; 
+0

我已经使用处理程序,但它给了我一个例外。 – Rcp 2012-07-31 11:40:40

+0

什么异常?你可以显示你的代码和logcat的例外..而不是这个Log.e(“UDP”,“S:错误”,电子);写Log.e(“UDP”,“S:Error”+ e); – mainu 2012-08-03 06:22:37

0

你必须创建和初始化Handler对象,做它主要还是UI线程。之后,您将能够将消息和Runnables从工作线程发布到处理程序。

或者,你可以使用

Activity.runOnUiThread(Runnable) 
View.post(Runnable) 
View.postDelayed(Runnable, long) 

您可能会因Android multithreading guide非常有用的。