Android Asyntask异常调用FromErrorThreadException
我被我经常犯的这个错误弄糊涂了。应从主线程或UI线程调用ListView的UI元素或视图以及适配器notifystatechange方法。我从Asyntask的onPostExecute方法调用它们,因为它在主线程上运行。我制作了一个广播接收器和OnReceive方法,我创建了一个从Asyntask扩展而来的匿名类。然而,我仍然得到这个错误,我不知道为什么Android Asyntask异常调用FromErrorThreadException,android,exception,android-asynctask,Android,Exception,Android Asynctask,我被我经常犯的这个错误弄糊涂了。应从主线程或UI线程调用ListView的UI元素或视图以及适配器notifystatechange方法。我从Asyntask的onPostExecute方法调用它们,因为它在主线程上运行。我制作了一个广播接收器和OnReceive方法,我创建了一个从Asyntask扩展而来的匿名类。然而,我仍然得到这个错误,我不知道为什么 private BroadcastReceiver intentReceiver = new BroadcastReceiver() {
private BroadcastReceiver intentReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent != null) {
final String action = intent.getAction();
if(Constants.ACTION_SUCCESS_LAUNCHES.equals(action)) {
new LoadInBackground().execute();
} else if(Constants.ACTION_FAILURE_LAUNCHES.equals(action)) {
textView.setText("Poor Network Connection");
progressBar.setVisibility(View.GONE);
}
}
}
};
private class LoadInBackground extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
for(int i = 0; i < sharedPreference.getRockets().size(); i++) {
rocketsLocal.add(sharedPreference.getRockets().get(i));
rocketsGlobal.add(sharedPreference.getRockets().get(i));
}
if(sharedPreference.getPrefsNotifications())
setAlarm(sharedPreference.getRockets()
.get(0).getWsstamp());
return null;
}
@Override
protected void onPostExecute(Void v) {
//should be handled in main thread
adapterLocal.notifyDataSetChanged();
adapterGlobal.notifyDataSetChanged();
//should be handled in main thread
textView.setVisibility(View.GONE);
progressBar.setVisibility(View.GONE);
}
}
19:02:56 E AndroidRuntime:at android.database.DataSetObservable.notifyChanged(DataSetObservable.java:37)
19:02:56 E AndroidRuntime:at android.widget.BaseAdapter.notifyDataSetChanged(BaseAdapter.java:50)
19:02:56 E AndroidRuntime:at android.widget.ArrayAdapter.notifyDataSetChanged(ArrayAdapter.java:286)
19:02:56 E AndroidRuntime:com.studiotyche.apps.android.launchtracker.MainActivity$LoadInBackground.doInBackground(MainActivity.java:322)
19:02:56 E AndroidRuntime:com.studiotyche.apps.android.launchtracker.MainActivity$LoadInBackground.doInBackground(MainActivity.java:310)
19:02:56 E AndroidRuntime:at android.os.AsyncTask$2.call(AsyncTask.java:292)
19:02:56 E AndroidRuntime:at java.util.concurrent.FutureTask.run(FutureTask.java:237)
19:02:56 E AndroidRuntime:。。。4更多
19:02:56 E ActivityThread:Activity com.studiotyche.apps.android.launchtracker.main Activity已泄漏IntentReceiver com.studiotyche.apps.android.launchtracker.main Activity$4@90e6214原来是在这里注册的。是否缺少对unregisterReceiver()的调用?
19:02:56 E ActivityThread:android.app.IntentReceiver泄漏:Activity com.studiotyche.apps.android.launchtracker.main活动已泄漏IntentReceiver com.studiotyche.apps.android.launchtracker.main活动$4@90e6214原来是在这里注册的。是否缺少对unregisterReceiver()的调用?
19:02:56 E ActivityThread:在android.app.LoadedApk$ReceiverDispatcher。(LoadedApk.java:903)
19:02:56 E ActivityThread:在android.app.LoadedApk.GetReceiveDispatcher(LoadedApk.java:704)上
19:02:56 E ActivityThread:at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1643)
19:02:56 E ActivityThread:at android.app.ContextImpl.registerReceiver(ContextImpl.java:1623)
19:02:56 E ActivityThread:at android.app.ContextImpl.registerReceiver(ContextImpl.java:1617)
19:02:56 E ActivityThread:at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:489)
19:02:56 E ActivityThread:com.studiotyche.apps.android.launchtracker.MainActivity.onCreate(MainActivity.java:124)
19:02:56 E ActivityThread:at android.app.Activity.performCreate(Activity.java:5990)
19:02:56 E ActivityThread:at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
19:02:56 E ActivityThread:at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
19:02:56 E ActivityThread:at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
19:02:56 E ActivityThread:android.app.ActivityThread.access$800(ActivityThread.java:151)
19:02:56 E ActivityThread:at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
19:02:56 E ActivityThread:at android.os.Handler.dispatchMessage(Handler.java:102)
19:02:56 E ActivityThread:at android.os.Looper.loop(Looper.java:135)
19:02:56 E ActivityThread:位于android.app.ActivityThread.main(ActivityThread.java:5254)
19:02:56 E ActivityThread:at java.lang.reflect.Method.invoke(本机方法)
19:02:56 E ActivityThread:at java.lang.reflect.Method.invoke(Method.java:372)
19:02:56 E ActivityThread:com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
19:02:56 E ActivityThread:at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)只能从主线程调用asynctask在主线程上处理OnRecieve()
19:02:56 E AndroidRuntime : FATAL EXCEPTION: AsyncTask #1
19:02:56 E AndroidRuntime : Process: com.xyz, PID: 17500
19:02:56 E AndroidRuntime : java.lang.RuntimeException: An error occured while executing doInBackground()
19:02:56 E AndroidRuntime : at android.os.AsyncTask$3.done(AsyncTask.java:304)
19:02:56 E AndroidRuntime : at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
19:02:56 E AndroidRuntime : at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
19:02:56 E AndroidRuntime : at java.util.concurrent.FutureTask.run(FutureTask.java:242)
19:02:56 E AndroidRuntime : at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
19:02:56 E AndroidRuntime : at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
19:02:56 E AndroidRuntime : at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
19:02:56 E AndroidRuntime : at java.lang.Thread.run(Thread.java:818)
19:02:56 E AndroidRuntime : Caused by: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
19:02:56 E AndroidRuntime : at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6357)
19:02:56 E AndroidRuntime : at android.view.ViewRootImpl.focusableViewAvailable(ViewRootImpl.java:2944)
19:02:56 E AndroidRuntime : at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:685)
19:02:56 E AndroidRuntime : at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:685)
19:02:56 E AndroidRuntime : at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:685)
19:02:56 E AndroidRuntime : at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:685)
19:02:56 E AndroidRuntime : at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:685)
19:02:56 E AndroidRuntime : at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:685)
19:02:56 E AndroidRuntime : at android.view.View.setFlags(View.java:9691)
19:02:56 E AndroidRuntime : at android.view.View.setFocusableInTouchMode(View.java:6771)
19:02:56 E AndroidRuntime : at android.widget.AdapterView.checkFocus(AdapterView.java:727)
19:02:56 E AndroidRuntime : at android.widget.AdapterView$AdapterDataSetObserver.onChanged(AdapterView.java:822)
19:02:56 E AndroidRuntime : at android.widget.AbsListView$AdapterDataSetObserver.onChanged(AbsListView.java:6140)