android.view.ViewRootImpl$CalledFromWrongThreadException: 只有创建视图层次结构的原始线程才能触摸它的视图。
android.view.ViewRootImpl$CalledFromWrongThreadException: 只有创建视图层次结构的原始线程才能触摸它的视图。
这个问题已经有了答案:
我遇到了一个问题,导致我的应用程序强制关闭,我不确定为什么会发生这种情况。我的 logcat 和源代码如下所示。请让我知道是否需要任何其他信息。
LOGCAT:
09-16 17:28:22.881: I/dalvikvm(18145): Total arena pages for JIT: 11 09-16 17:28:22.991: I/dalvikvm(18145): Total arena pages for JIT: 12 09-16 17:28:23.461: I/dalvikvm(18145): Total arena pages for JIT: 13 09-16 17:28:23.461: I/dalvikvm(18145): Total arena pages for JIT: 14 09-16 17:28:23.521: I/System.out(18145): Arrest No. 09-16 17:28:23.521: W/dalvikvm(18145): threadid=11: thread exiting with uncaught exception (group=0x41785300) 09-16 17:28:23.531: E/AndroidRuntime(18145): FATAL EXCEPTION: AsyncTask #1 09-16 17:28:23.531: E/AndroidRuntime(18145): java.lang.RuntimeException: An error occured while executing doInBackground() 09-16 17:28:23.531: E/AndroidRuntime(18145): at android.os.AsyncTask$3.done(AsyncTask.java:299) 09-16 17:28:23.531: E/AndroidRuntime(18145): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 09-16 17:28:23.531: E/AndroidRuntime(18145): at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 09-16 17:28:23.531: E/AndroidRuntime(18145): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 09-16 17:28:23.531: E/AndroidRuntime(18145): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 09-16 17:28:23.531: E/AndroidRuntime(18145): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 09-16 17:28:23.531: E/AndroidRuntime(18145): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 09-16 17:28:23.531: E/AndroidRuntime(18145): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 09-16 17:28:23.531: E/AndroidRuntime(18145): at java.lang.Thread.run(Thread.java:856) 09-16 17:28:23.531: E/AndroidRuntime(18145): Caused by: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 09-16 17:28:23.531: E/AndroidRuntime(18145): at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4609) 09-16 17:28:23.531: E/AndroidRuntime(18145): at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:835) 09-16 17:28:23.531: E/AndroidRuntime(18145): at android.view.View.requestLayout(View.java:15129) 09-16 17:28:23.531: E/AndroidRuntime(18145): at android.view.View.requestLayout(View.java:15129) 09-16 17:28:23.531: E/AndroidRuntime(18145): at android.view.View.requestLayout(View.java:15129) 09-16 17:28:23.531: E/AndroidRuntime(18145): at android.view.View.requestLayout(View.java:15129) 09-16 17:28:23.531: E/AndroidRuntime(18145): at android.view.View.requestLayout(View.java:15129) 09-16 17:28:23.531: E/AndroidRuntime(18145): at android.widget.TextView.checkForRelayout(TextView.java:6309) 09-16 17:28:23.531: E/AndroidRuntime(18145): at android.widget.TextView.setText(TextView.java:3547) 09-16 17:28:23.531: E/AndroidRuntime(18145): at android.widget.TextView.setText(TextView.java:3405) 09-16 17:28:23.531: E/AndroidRuntime(18145): at android.widget.TextView.setText(TextView.java:3380) 09-16 17:28:23.531: E/AndroidRuntime(18145): at com.example.test.MainActivity$MyTask.doInBackground(MainActivity.java:59) 09-16 17:28:23.531: E/AndroidRuntime(18145): at com.example.test.MainActivity$MyTask.doInBackground(MainActivity.java:1) 09-16 17:28:23.531: E/AndroidRuntime(18145): at android.os.AsyncTask$2.call(AsyncTask.java:287) 09-16 17:28:23.531: E/AndroidRuntime(18145): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 09-16 17:28:23.531: E/AndroidRuntime(18145): ... 5 more
SOURCE:
public class MainActivity extends Activity { TextView tv; final String URL="http://example.com"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.TextView01); new MyTask().execute(URL); } private class MyTask extends AsyncTask<String, Void, String> { ProgressDialog prog; String title = ""; @Override protected void onPreExecute() { prog = new ProgressDialog(MainActivity.this); prog.setMessage("Loading...."); prog.show(); } @Override protected String doInBackground(String... params) { try { Document doc = Jsoup.connect(params[0]).get(); Element tableHeader = doc.select("tr").first(); for( Element element : tableHeader.children() ) { // Here you can do something with each element System.out.println(element.text()); tv.setText(element.text()); } title = doc.title(); } catch (IOException e) { e.printStackTrace(); } return title; } @Override protected void onPostExecute(String result) { super.onPostExecute(result); prog.dismiss(); tv.setText(result); } } }
admin 更改状态以发布 2023年5月21日