Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.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
Android Jsoup和线程错误_Android_Multithreading_Jsoup - Fatal编程技术网

Android Jsoup和线程错误

Android Jsoup和线程错误,android,multithreading,jsoup,Android,Multithreading,Jsoup,我正在研究jsoup库,并编写了以下简单代码来观察它是如何工作的: public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); downloadThread.star

我正在研究jsoup库,并编写了以下简单代码来观察它是如何工作的:

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    downloadThread.start();

}

Thread downloadThread = new Thread() {
    @Override
    public void run() {
        TextView tw = (TextView) findViewById(R.text_view.tw1);
        Document doc;
        try {
            doc = Jsoup.connect("http://www.google.it").get();
            tw.setText(doc.title());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
};
我已经将这个元素添加到AndroidManifest.xml中

<uses-permission 
    android:name="android.permission.INTERNET"/>

不能从与主线程不同的线程访问UI组件

公共类MainActivity扩展活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
新示例AsyncTask().execute();
}
静态类示例AsyncTask扩展了AsyncTask{
@凌驾
受保护字符串DOIN背景(无效…未使用){
文件文件;
试一试{
doc=Jsoup.connect(“http://www.google.it).get();
返回单据标题();
}捕获(IOE异常){
返回null;
}
}
@凌驾
受保护的void onPostExecute(字符串标题){
if(title==null){
Toast.makeText(MainActivity.this,“error”,Toast.LENGTH_SHORT.show();
返回;
}
TextView tw=(TextView)findViewById(R.text\u view.tw1);
tw.setText(标题);
}
}
}
04-27 17:25:49.801: E/AndroidRuntime(26035): FATAL EXCEPTION: Thread-2004
04-27 17:25:49.801: E/AndroidRuntime(26035):   
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that   
created a view hierarchy can touch its views.
04-27 17:25:49.801: E/AndroidRuntime(26035):    at   
android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4746)
04-27 17:25:49.801: E/AndroidRuntime(26035):    at   
android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:854)
04-27 17:25:49.801: E/AndroidRuntime(26035):    at  
android.view.ViewGroup.invalidateChild(ViewGroup.java:4075)
04-27 17:25:49.801: E/AndroidRuntime(26035):    at  
android.view.View.invalidate(View.java:10386)
04-27 17:25:49.801: E/AndroidRuntime(26035):    at  
android.view.View.invalidate(View.java:10341)
04-27 17:25:49.801: E/AndroidRuntime(26035):    at  
android.widget.TextView.checkForRelayout(TextView.java:6439)
04-27 17:25:49.801: E/AndroidRuntime(26035):    at    
android.widget.TextView.setText(TextView.java:3696)
04-27 17:25:49.801: E/AndroidRuntime(26035):    at  
android.widget.TextView.setText(TextView.java:3554)
04-27 17:25:49.801: E/AndroidRuntime(26035):    at 
android.widget.TextView.setText(TextView.java:3529)
04-27 17:25:49.801: E/AndroidRuntime(26035):    at 
com.example.webparsingtest.MainActivity$1.run(MainActivity.java:30)
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new ExampleAsyncTask().execute();
    }

    static class ExampleAsyncTask extends AsyncTask<Void, Void, String> {

        @Override
        protected String doInBackground(Void... unused) {
            Document doc;
            try {
                doc = Jsoup.connect("http://www.google.it").get();
                return doc.title();
            } catch (IOException e) {
                return null;
            }
        }

        @Override
        protected void onPostExecute(String title) {

            if(title == null){
                Toast.makeText(MainActivity.this, "error", Toast.LENGTH_SHORT).show();
                return;
            }

            TextView tw = (TextView) findViewById(R.text_view.tw1);
            tw.setText(title);
        }
    }

}