Próbuję stworzyć program, który powinien działaćcoś w rodzaju katalogu - mam tablicę JSON, którą przeglądam i analizuję obiekty JSON w ciąg zawierający łącze do obrazu oraz dwa ciągi opisów dla każdego obiektu. Teraz, kiedy pobieram obrazy z Internetu za pomocą linku, napotykam problem z tym samym obrazem za każdym razem, obraz nr 93. Sprawdziłem link i działa, tak samo jak inne. To się stało:
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)
Tak wygląda moja 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);
}
}
Oto jak nazywam AsyncTask:
new DownloadImageTask(imgProductPicture).execute(pictureLink);
layoutTest.addView(NewImgView);
W moim kodzie upewniam się, że nie więcej niż 5 zsą one wywoływane jednocześnie i wszystkie ładują się bez problemu, dopóki nie dotrą do obiektu zindeksowanego 92. Sam obiekt jest w porządku, ale aplikacja wyłącza się zawsze w tym momencie. Czy ktoś ma pomysł, dlaczego? Próbowałem pobierać mniej obrazów na raz (jeden po drugim) i nadal nie udaje się w tym samym momencie. Doceniam każdą pomoc.
Odpowiedzi:
0 dla odpowiedzi № 1AsyncTask wykorzystuje moduł obsługi głównego wątku do wywołania zwrotnego onPostExecute()
. Jeśli główny wątek jest martwy, kiedy ma zostać wywołane, system zgłasza wyjątek. Aby tego uniknąć, musisz utrzymać główny wątek przy życiu, dopóki cała praca nie zostanie zakończona.
0 dla odpowiedzi nr 2
Rozwiązałem problem, tworząc nową funkcję obsługi / uruchamiania za każdym razem, gdy wywoływałem DownloadImageTask. Dziękujemy wszystkim, którzy próbowali pomóc.