Java 尝试在android中多线程执行网络任务
我在使用Android中的另一个线程检查web服务器的可用性时遇到问题 我启动一个新线程以避免:Java 尝试在android中多线程执行网络任务,java,android,multithreading,networking,Java,Android,Multithreading,Networking,我在使用Android中的另一个线程检查web服务器的可用性时遇到问题 我启动一个新线程以避免: NetworkOnMainThreadException 这是日志目录: E/AndroidRuntime(17753): FATAL EXCEPTION: Thread-2370 E/AndroidRuntime(17753): Process: com.example.c3po, PID: 17753 E/AndroidRuntime(17753): android.view.ViewRoot
NetworkOnMainThreadException
这是日志目录:
E/AndroidRuntime(17753): FATAL EXCEPTION: Thread-2370
E/AndroidRuntime(17753): Process: com.example.c3po, PID: 17753
E/AndroidRuntime(17753): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
E/AndroidRuntime(17753): at com.example.c3po.MainActivity$1SecondThread.run(MainActivity.java:72)
第二个线程中使用的代码
class SecondThread extends Thread {
public void run() {
TextView pingResult = (TextView) findViewById(R.id.checkStatus); // to display result
EditText userText = (EditText) findViewById(R.id.userData); // take in user url
String result = userText.getText().toString();
try {
InetAddress address = InetAddress.getByName(result); // user input is result (a URL)
boolean b = address.isReachable(3000);
String str = String.valueOf(b); // turning the value of the boolean into string
pingResult.setText(str); // value displays as true or false - LINE 72
}
catch (UnknownHostException e) {pingResult.setText("WRONG");} // will fill with helpful message later
catch (IOException e) {pingResult.setText("WRONG");}
}
和触发线程的按钮:
Button sendPing = (Button) findViewById(R.id.pingButton);
sendPing.setOnClickListener(new OnClickListener() {
public void onClick (View activity_main) {
SecondThread thread = new SecondThread();
thread.start();
}
});
第72行已注释。我曾尝试在谷歌上搜索具体问题,但结果好坏参半
任何帮助都将不胜感激
非常感谢您正在从后台线程更新ui。你不能那样做。Ui需要在Ui线程上更新。使用异步任务 你可以用
runOnUiThread(new Runnable() {
@Override
public void run() {
pingResult.setText(str);
}
});
pingResult.settExtError的情况类似
但最好使用AsyncTask,因为它会更简单。在本例中,您可以在doInBackground返回结果ie字符串中进行后台计算,并在onPostExecute中更新ui