AndroidRuntime: FATAL EXCEPTION: OkHttp Dispatcher - CalledFromWrongThreadException 解决方法
"AndroidRuntime: FATAL EXCEPTION: OkHttp Dispatcher\n\tProcess: com.example.zhcs3, PID: 18430\n\tandroid.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.\n\t\tat android.view.ViewRootImpl.checkThread(ViewRootImpl.java:7286)\n\t\tat android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:1155)\n\t\tat android.view.View.requestLayout(View.java:21926)\n\t\tat android.view.View.requestLayout(View.java:21926)\n\t\tat android.view.View.requestLayout(View.java:21926)\n\t\tat android.view.View.requestLayout(View.java:21926)\n\t\tat android.view.View.requestLayout(View.java:21926)\n\t\tat android.view.View.requestLayout(View.java:21926)\n\t\tat android.view.View.requestLayout(View.java:21926)\n\t\tat android.view.View.requestLayout(View.java:21926)\n\t\tat androidx.recyclerview.widget.RecyclerView.requestLayout(RecyclerView.java:4412)\n\t\tat android.view.View.requestLayout(View.java:21926)\n\t\tat android.view.View.requestLayout(View.java:21926)\n\t\tat android.view.View.requestLayout(View.java:21926)\n\t\tat android.view.View.requestLayout(View.java:21926)\n\t\tat android.view.View.requestLayout(View.java:21926)\n\t\tat android.view.View.requestLayout(View.java:21926)\n\t\tat androidx.recyclerview.widget.RecyclerView.requestLayout(RecyclerView.java:4412)\n\t\tat androidx.recyclerview.widget.RecyclerView.setAdapter(RecyclerView.java:1163)\n\t\tat androidx.viewpager2.widget.ViewPager2.setAdapter(ViewPager2.java:461)\n\t\tat com.youth.banner.Banner.setAdapter(Banner.java:692)\n\t\tat com.example.zhcs3.Fragment.SyFragment$getBanner$1.invoke(SyFragment.kt:46)\n\t\tat com.example.zhcs3.Fragment.SyFragment$getBanner$1.invoke(SyFragment.kt:39)\n\t\tat com.example.zhcs3.logic.Httputi$get$2.onResponse(Httputi.kt:35)\n\t\tat okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)\n\t\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)\n\t\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)\n\t\tat java.lang.Thread.run(Thread.java:764)\n"\n\n这个错误是因为在非主线程中操作了UI界面,解决方法是使用主线程来更新UI。你可以使用以下方法之一来解决问题:\n\n1. 使用Handler机制:在非主线程中使用Handler发送消息,然后在主线程中处理消息并更新UI。\n\njava\nHandler handler = new Handler(Looper.getMainLooper());\nhandler.post(new Runnable() {\n\t@Override\n\tpublic void run() {\n\t\t// 在这里更新UI\n\t}\n});\n\n\n2. 使用Activity的runOnUiThread()方法:在非主线程中调用Activity的runOnUiThread()方法来更新UI。\n\njava\nrunOnUiThread(new Runnable() {\n\t@Override\n\tpublic void run() {\n\t\t// 在这里更新UI\n\t}\n});\n\n\n3. 使用AsyncTask:在AsyncTask的doInBackground()方法中执行耗时操作,在onPostExecute()方法中更新UI。\n\njava\nprivate class MyTask extends AsyncTask<Void, Void, Void> {\n\t@Override\n\tprotected Void doInBackground(Void... voids) {\n\t\t// 在这里执行耗时操作\n\t\treturn null;\n\t}\n\n\t@Override\n\tprotected void onPostExecute(Void aVoid) {\n\t\tsuper.onPostExecute(aVoid);\n\t\t// 在这里更新UI\n\t}\n}\n\n\n请根据你的具体情况选择适合的方法来解决问题。
原文地址: https://www.cveoy.top/t/topic/pUVa 著作权归作者所有。请勿转载和采集!