Android Asyntask异常调用FromErrorThreadException

Android Asyntask异常调用FromErrorThreadException,android,exception,android-asynctask,Android,Exception,Android Asynctask,我被我经常犯的这个错误弄糊涂了。应从主线程或UI线程调用ListView的UI元素或视图以及适配器notifystatechange方法。我从Asyntask的onPostExecute方法调用它们,因为它在主线程上运行。我制作了一个广播接收器和OnReceive方法,我创建了一个从Asyntask扩展而来的匿名类。然而,我仍然得到这个错误,我不知道为什么 private BroadcastReceiver intentReceiver = new BroadcastReceiver() {

我被我经常犯的这个错误弄糊涂了。应从主线程或UI线程调用ListView的UI元素或视图以及适配器notifystatechange方法。我从Asyntask的onPostExecute方法调用它们,因为它在主线程上运行。我制作了一个广播接收器和OnReceive方法,我创建了一个从Asyntask扩展而来的匿名类。然而,我仍然得到这个错误,我不知道为什么

 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)