我下载了一个包含View背景图片网址的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()
我哪里错了?
答案 0 :(得分:1)
将ImageLoader的代码移动到asyncTask的onPostExecute。你不能在任何线程中创建处理程序(ImageLoader需要一个我想的处理程序)。你需要一个带有looper的线程并调用Looper.prepare()。 AsyncTask的线程没有looper。所以将代码移动到onPostExecute以在主线程上运行它。
答案 1 :(得分:0)
你试图从没有调用Looper.prepare()的工作线程创建一个处理程序是错的,也许你甚至没有故意这样做,但是有很多方法可以创建处理程序为了修改视图,通常这个处理程序附加到主UI线程,但很可能你正在调用一个试图从工作线程创建处理程序的方法,如果是这样,你要做的是,从main调用该方法用户界面,但要确保它不会冻结你的用户界面,如果是这样的话就创建你自己的处理程序并在完成后执行它,或者如果你在需要的时候调用runOnUIThread方法...
希望这有助于。
问候!
答案 2 :(得分:0)
试试这个。
runOnUiThread(new Runnable() {
@Override
public void run() {
mainLayout.setBackgroundDrawable(d);
}
});