1

我下载了一个包含视图背景图像 URL 的 JSON 字符串。下载代码在里面doInBackground(Object... params)。对于加载图像,我使用的是 Universal Image Loader。

ImageLoader.getInstance().loadImage(shop.background, new ImageLoadingListener() {

    public void onLoadingStarted(String imageUri, View view) {
        // TODO Auto-generated method stub
    }

    public void onLoadingFailed(String imageUri, View view, 
            FailReason failReason) {
        // TODO Auto-generated method stub
    }

    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
        // TODO Auto-generated method stub
        Drawable d = new BitmapDrawable(getResources(),loadedImage);
        mainLayout.setBackgroundDrawable(d);
    }

    public void onLoadingCancelled(String imageUri, View view) {
        // TODO Auto-generated method stub
    }
});

我正进入(状态

java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

我哪里错了?

4

3 回答 3

1

将 ImageLoader 的代码移动到 asyncTask 的 onPostExecute。您不能在任何线程中创建处理程序(我想 ImageLoader 需要一个处理程序)。您需要一个带有 looper 和 Looper.prepare() 被调用的线程。AsyncTask 的线程没有looper。所以将代码移动到 onPostExecute 以在主线程上运行它。

于 2013-09-30T19:30:07.780 回答
0

您尝试从没有调用 Looper.prepare() 的工作线程创建处理程序是错误的,也许您甚至没有故意这样做,但是有很多方法可以创建处理程序以修改视图,通常此处理程序附加到主 UI 线程,但是很可能您正在调用尝试从工作线程创建处理程序的方法,如果是这样,您要做的是从主 UI 调用该方法,但是确保它不会冻结您的 UI,如果是这种情况,请创建您自己的处理程序并在完成后执行它,或者如果您在 Activity 中,则在需要时调用 runOnUIThread 方法...

希望这可以帮助。

问候!

于 2013-09-30T19:28:34.020 回答
0

试试这个。

            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    mainLayout.setBackgroundDrawable(d);
                }
            });
于 2013-09-30T19:30:33.093 回答