我正在尝试创建一个类似于目录的程序 - 我有一个JSON数组,我循环并将JSON对象解析为包含图像链接的字符串,以及两个字符串,用于描述每个对象。现在,当使用链接从互联网下载图像时,我每次都遇到同一图像的问题,图像编号为93.我检查了链接,它正在工作,与其他链接一样。 发生这种情况:
W/MessageQueue: Handler (android.os.Handler) {f95f6fe} sending message to a Handler on a dead thread
java.lang.IllegalStateException: Handler (android.os.Handler) {f95f6fe} sending message to a Handler on a dead thread
at android.os.MessageQueue.enqueueMessage(MessageQueue.java:543)
at android.os.Handler.enqueueMessage(Handler.java:643)
at android.os.Handler.sendMessageAtTime(Handler.java:612)
at android.os.Handler.sendMessageDelayed(Handler.java:582)
at android.os.Handler.post(Handler.java:338)
at android.os.ResultReceiver$MyResultReceiver.send(ResultReceiver.java:57)
at com.android.internal.os.IResultReceiver$Stub.onTransact(IResultReceiver.java:58)
at android.os.Binder.execTransact(Binder.java:565)
这就是我的AsyncTask看起来的样子:
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;
public DownloadImageTask(ImageView bmImage) {
this.bmImage = bmImage;
}
protected Bitmap doInBackground(String... urls) {
String urldisplay = urls[0];
Bitmap mIcon11 = null;
try {
InputStream in = new java.net.URL(urldisplay).openStream();
mIcon11 = BitmapFactory.decodeStream(in);
} catch (Exception e) {
e.printStackTrace();
}
return mIcon11;
}
protected void onPostExecute(Bitmap result) {
bmImage.setImageBitmap(result);
}
}
这就是我调用AsyncTask的方式:
new DownloadImageTask(imgProductPicture).execute(pictureLink);
layoutTest.addView(NewImgView);
在我的代码中,我确保一次调用不超过5个,并且在到达索引为92的对象之前它们都会毫无问题地加载。对象本身很好,但应用程序此时关闭。有谁知道为什么?我尝试一次下载较少的图像(逐个),但仍然在同一点上失败。我很感激任何帮助。
答案 0 :(得分:0)
AsyncTask使用主线程的处理程序来回调onPostExecute()
。如果主线程在回调时死机,系统会抛出异常。为避免这种情况,您必须保持主线程处于活动状态,直到所有工作完成。
答案 1 :(得分:0)
我通过每次调用DownloadImageTask时创建一个新的处理程序/ runnable来解决问题。感谢所有试图提供帮助的人。