2015-04-28 43 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)方法。

相关问题