Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试在android中多线程执行网络任务_Java_Android_Multithreading_Networking - Fatal编程技术网

Java 尝试在android中多线程执行网络任务

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

我在使用Android中的另一个线程检查web服务器的可用性时遇到问题

我启动一个新线程以避免:

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