IndexOutOfBoundsException nach dem Repopulieren von ArrayList (nur Marshmallow)

8

Mein Setup ist wie folgt: In meinem onCreate initialisiere ich eine ArrayList wie folgt:

%Vor%

und die AsyncTask ruft den Text über HttpURLConnection() ab, analysiert den JSON mit JsonReader und fügt jede Textzeile der TextListe hinzu (all dies geschieht innerhalb der doInBackground der AsyncTask. Ich habe einen benutzerdefinierten Adapter, der die Zeichenfolgen in textList .

Ich habe auch eine Funktion gotoNextSection() , die ausgelöst wird, wenn der Benutzer zur nächsten Seite navigieren möchte, wo ich etwas mache wie:

%Vor%

Da ich jedoch nicht möchte, dass der veraltete Text von der vorherigen Seite auf dem Bildschirm angezeigt wird, mache ich Folgendes in meiner AsyncTask:

%Vor%

, so dass die ArrayList leer und bereit ist, erneut zu füllen. All dies funktioniert in allen anderen unterstützten Android-Versionen, aber wenn ich es in einem Marshmallow-Emulator ausprobiert habe, führt gotoNextSection() zu einer IndexOutOfBoundsException. Dies tritt auf, nachdem der neue Inhalt zur frisch gelöschten arrayList hinzugefügt wurde (verifiziert) via Logging), also glaube ich nicht, dass es eine Race Condition ist. Beachten Sie, dass das Löschen der Liste die Ausnahme nicht verhindert, und da dies die einzige in der Aktivität verwendete ArrayList ist, bin ich sicher, dass .clear() das Problem ist. Ich habe versucht, es aufzulösen und neu zu initialisieren, bevor ich die AsyncTask auch als eine Alternative starte, ohne Erfolg. Auch dies geschieht ausschließlich unter Android 6.0. Gedanken?

BEARBEITEN: Hier ist der Logcat Stacktrace. Beachten Sie, dass die Größe des Index, auf den zugegriffen wird und wo der Code auftritt, irrelevant ist, da ich versucht habe, die ArrayList nach der Ausführung der Aufgabe in gotoNextSection zu protokollieren. habe versucht, im Log zuzugreifen.

%Vor%     
irvanjit 24.08.2015, 07:04
quelle

1 Antwort

4

Gelöst: Am Ende musste ich den Adapter vom ListView trennen, bevor ich ihn in postExecute () aufrufen und wieder verbinden konnte. Ich vermute, dass Marshmallow bei der Datenbindung strenger ist

    
irvanjit 25.08.2015, 21:02
quelle