2014-04-11 36 views
0

我想運行我的ServerSocket,我知道如何使用線程,但我想在Ui中啓動它,所以我想用AsyncTask啓動這個服務器。運行服務器不在UiThread

我有代碼:

​​

,但它不工作,誰能告訴我該怎麼辦?

我使用的AsyncTask ServerClient運行,我想也跑我的服務器liek的是, 這裏是我的客戶端代碼:

public class MyClientTask extends AsyncTask<Void, Void, Void> { 
     String dstAddress="..." 
     int dstPort=8080; 
     String response = ""; 

     MyClientTask(String addr, int port){ 
     dstAddress = addr; 
     dstPort = port; 
     } 

    @Override 
    protected Void doInBackground(Void... arg0) { 
      Socket socket = null;   
      try { 
      socket = new Socket(dstAddress, dstPort);         
      } catch (UnknownHostException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      response = "UnknownHostException: " + e.toString(); 
      } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      response = "IOException: " + e.toString(); 
      }finally{ 
      if(socket != null){ 
      try { 
       socket.close(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      } 
      } 
      return null; 
      } 
      @Override 
      protected void onPostExecute(Void result) 
      { 
      super.onPostExecute(result); 
      } 
    } 

}

回答

0

這是錯誤的

Toast.makeText(getApplicationContext(), "server is on", Toast.LENGTH_SHORT).show(); 

Toast在主線程上運行,並且由於無法在後臺更新UI元素Thread因此無法從調用它

您可以通過在doInBackground()

調用publishProgress()如果仍不能正常工作,然後定義「但它不工作」的onPostExecute()onProgressUpdate()做到這一點。這不是一個有用的總結什麼是/什麼不發生。

我知道如何使用線程來做到這一點,但我想如果你是在一個單獨的Thread在UI Thread運行運行它不啓動它在UI

+0

即使我把toast放在onPostExecute()它不工作,我不認爲我使用AsyncTask權利,我只需要在後臺運行服務器。代碼在帖子中是不正確的。 – user3465277

+0

那是你所有的代碼嗎? – codeMagic

+0

ServerSocket serverSocket; – user3465277