2015-04-28 42 views
0

我正在開發一款PC和移動設備與服務器通話的軟件。當我運行從JAVA桌面應用程序的代碼,它給了我以下錯誤 android.os.NetworkOnMainThreadExceptionandroid.os.NetworkOnMainThreadException如何修改它在單獨線程中運行的代碼

我試圖實現我的班作爲一個線程,但我認爲我沒有得到它的權利。它仍然給我錯誤

我會很高興任何支持。

類ServerAccessMobile是做所有的網絡,有兩個方法,一個方法從服務器獲取數據,一個用於服務器

上設定數據,這是我想從任何活動執行它/服務

ServerAccessMobile serverAccessMobile = new ServerAccessMobile(); 
ArrayList <String> dataFromServer = **serverAccessMobile.getDataFromServer()**; 

ArrayList <String> dataToSend = ..... 

**serverAccessMobile.setDataOServer(dataToSend)**; 

這是類ServerAccessMobile代碼現在

public class ServerAccessMobile { 

    // private variables 
    private ObjectOutputStream outputStream; 
    private ObjectInputStream inputStream; 
    ... 

    // constructor 
    public ServerAccessMobile(String arg1) 
    { 
     ... 
    } 

    **private ArrayList<String> run(ArrayList<String> messageToSendList)** 
    { 
     ArrayList <String> receivedMessageList = new ArrayList <String>(); 

     try // connect to server, get streams, process connection 
     { 
      connectToServer(); // create a Socket to make connection 

      getStreams(); // get the input and output streams 

      sendData(messageToSendList); 

      receivedMessageList = processConnection(); 
     } 
     catch (EOFException eofException) 
     { 
      System.out.println("\n terminated connection"); 
     } 
     catch (IOException ioException) 
     { 
      ioException.printStackTrace(); 
     } 
     finally 
     { 
      closeConnection(); // close connection 
     } 

     return receivedMessageList; 
    } 

    public ArrayList <String > getDataFromServer(){ 

     ArrayList<String> commandMessage = new ArrayList<String>(); 
     commandMessage.add("GETDATA"); 

     ArrayList<String> receivedMessageList = new ArrayList<String>(); 

     // start server communication 
     receivedMessageList = **run(commandMessage);** 
    } 

    public void setDataOnServer(ArrayList <String> messageToSendList){ 

     // start server communication 
     **run(messageToSendList);** 
    } 
} 

我的問題,

run()方法中的代碼應該在單獨的線程中運行,而不是在ui線程中運行 我該如何實現它的正確性?

感謝ü

回答

1

您可以找到有關線程通過以下鏈接詳細說明:http://developer.android.com/guide/components/processes-and-threads.html#Threads

你可以做這樣的

new Thread(new Runnable() { 
    public void run() { 
     ServerAccessMobile serverAccessMobile = new ServerAccessMobile(); 

    ArrayList <String> dataFromServer = **serverAccessMobile.getDataFromServer()**; 

    ArrayList <String> dataToSend = ..... 

    serverAccessMobile.setDataOServer(dataToSend); 
    } 
}).start(); 

東西,如果你想更新此主題的用戶界面你必須調用view.post(Runnable)方法。

相關問題