Android:AsyncTask 4的致命异常

Android:AsyncTask 4的致命异常,android,http,asynchronous,Android,Http,Asynchronous,我的应用程序有时会因以下错误而崩溃: 它基本上是一个异步http请求,用于收集url上的图片 04-18 14:47:51.336: ERROR/AndroidRuntime(10112): FATAL EXCEPTION: AsyncTask #4 java.lang.RuntimeException: An error occured while executing doInBackground() at android.os.AsyncTask$3.done(AsyncTa

我的应用程序有时会因以下错误而崩溃: 它基本上是一个异步http请求,用于收集url上的图片

04-18 14:47:51.336: ERROR/AndroidRuntime(10112): FATAL EXCEPTION: AsyncTask #4
    java.lang.RuntimeException: An error occured while executing doInBackground()
    at android.os.AsyncTask$3.done(AsyncTask.java:299)
    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
    at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
    at java.lang.Thread.run(Thread.java:856)
    Caused by: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
    at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4865)
    at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:979)
    at android.view.ViewGroup.invalidateChild(ViewGroup.java:4306)
    at android.view.View.invalidate(View.java:10519)
    at android.view.View.setFlags(View.java:8635)
    at android.view.View.setVisibility(View.java:5647)
    at com.advertising.AdActivity.onPause(AdActivity.java:122)
    at com.advertising.AdActivity.close(AdActivity.java:355)
    at com.advertising.AdActivity.onImageFailure(AdActivity.java:470)
    at com.advertising.http.tasks.ImageHttpTask.raiseOnFailure(ImageHttpTask.java:74)
    at com.advertising.http.tasks.ImageHttpTask.doInBackground(ImageHttpTask.java:52)
    at com.advertising.http.tasks.ImageHttpTask.doInBackground(ImageHttpTask.java:20)
    at android.os.AsyncTask$2.call(AsyncTask.java:287)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
    ... 4 more
还有我的背景:

    protected Bitmap doInBackground(String... urls) {
    String urldisplay = urls[0];
    Bitmap mIcon11 = null;
    HttpResponse response;
    try {
        HttpGet request = new HttpGet(urldisplay);
        response = client.execute(request);
        HttpEntity entity = response.getEntity();
        InputStream inputStream = entity.getContent();
        mIcon11 = BitmapFactory.decodeStream(inputStream);
        inputStream.close();
    } catch (Exception e) {
        raiseOnFailure(e, ErrorType.AD_ERROR);}
    return mIcon11;}
编辑:这是我的inPostExecute/raiseOnSuccess/raiseOnFailure:

@Override
protected void onPostExecute(Bitmap result) {
        bmImage.setImageBitmap(result);
    raiseOnSuccess(bmImage);
}

private void raiseOnSuccess(ImageView imageView) {
    if (this.imageHttpDelegate != null) {
        this.imageHttpDelegate.onImageSuccess(imageView);
    } else {
        Logger.d("Successfull image received.");
    }
}

private void raiseOnFailure(Throwable throwable, ErrorType errorType) {
    if (this.imageHttpDelegate != null) {
        this.imageHttpDelegate.onImageFailure(throwable, errorType);
    } else {
        if (throwable.getMessage() != null) {
            Logger.d(throwable.getMessage());
        }
    }
}
你能帮我吗?
我不知道她为什么崩溃。

您的
raiseOnFailure
方法正在访问活动中的方法,这些方法应该只从主线程调用。尝试在
AsyncTask
中记录错误,然后在
onPostExecute
函数中调用
raiseOnError

例子
您的
raiseOnFailure
方法正在访问活动中只应从主线程调用的方法。尝试在
AsyncTask
中记录错误,然后在
onPostExecute
函数中调用
raiseOnError

例子 正在从后台访问视图


是否从后台访问视图

您不能直接从doinbackground()更新UI,但可以在preexecute()或postexecute()中进行更新

如果不可避免地要从doinbackground()更新UI,则可以通过以下方式进行:

runOnUiThread(new Runnable() {
                    public void run() {
                                       //update UI here

                        }

                    }
                });

您不能直接从doinbackground()更新UI,但可以在preexecute()或postexecute()中进行更新

如果不可避免地要从doinbackground()更新UI,则可以通过以下方式进行:

runOnUiThread(new Runnable() {
                    public void run() {
                                       //update UI here

                        }

                    }
                });

你们在操纵来自doInBackground的视图吗?你们在操纵来自doInBackground的视图吗?我真的不知道我在做什么?我在帖子中添加了我的其他方法我真的不知道我在做什么?我在帖子中添加了我的其他方法
runOnUiThread(new Runnable() {
                    public void run() {
                                       //update UI here

                        }

                    }
                });