Android Probleme mit ArrayList

bruce85

Bekanntes Mitglied
Hallo,
ich habe ein Problem mit ArrayList und zwar, möchte ich die Arrays von tempImages zu
einem anderen ArrayList hinzufügen, diese sich hier befindet:
Java:
AppConst.ARTICLE_ITEM_LIST.get(AppConst.ARTICLE_ITEM_SELECTED).getImages()
Das klappt auch, nur sobald die Arrays in der For Schleife hinzugefügt werden, wird auch beim ArrayList tempImages jeweils um 1 erhöht und somit habe ich dann eine Endlos Schleife, und meine App stürzt dann ab.

So versuche ich die Arrays einer anderen Array Liste hinzuzufügen:
Java:
private ArrayList<ArticleImageItem> tempImages = new ArrayList<>();
.........................
if (tempImages.size() > 0) {
    for (int i=0; i<tempImages.size(); i++) {
        AppConst.ARTICLE_ITEM_LIST.get(AppConst.ARTICLE_ITEM_SELECTED).getImages().add(tempImages.get(i));
    }
}

Hier sind mal die Java-Klassen von mir:
Java:
public class AppConst {
    public static List<ArticleItem> ARTICLE_ITEM_LIST = new ArrayList<ArticleItem>();
    public static List<ArticleImageItem> ARTICLE_IMAGE_ITEM_LIST = new ArrayList<ArticleImageItem>();
    public static int ARTICLE_ITEM_SELECTED = 0;
}


Java:
public class ArticleImageItem {
    ....................
    private Uri fileUri;

    public ArticleImageItem() {
    }

    public Uri getFileUri() {
        return fileUri;
    }

    public void setFileUri(Uri fileUri) {
        this.fileUri = fileUri;
    }

    ....................
}

Java:
public class ArticleItem {
    ....................
    private ArrayList<ArticleImageItem> images = new ArrayList<>();

    public ArticleItem() {
    }

    public ArrayList<ArticleImageItem> getImages() {
        return images;
    }

    public void setImages(ArrayList<ArticleImageItem> images) {
        this.images = images;
    }

    ....................
}

Wo könnte das Problem denn liegen?

Ich bedanke mich schon mal im Voraus.

Gruss
 
Hallo noch mal,
Sorry, der fehler lag woanders, es wurde in einer anderen Klasse bereits einmal hinzugefügt.
Nun funktioniert es.

Edit: Das wars doch nicht, also falls mir jemand helfen könnte, wäre ich sehr dankbar dafür.

Gruss
 
Danke Dir.
Ich hab mir was in der Console ausgeben lassen, wenn das hier ausgeführt wird:
Java:
for (int i=0; i<tempImages.size(); i++) {
    System.out.println("Title: "+tempImages.get(i).getTitle());
    AppConst.ARTICLE_ITEM_LIST.get(AppConst.ARTICLE_ITEM_SELECTED).getImages().add(tempImages.get(i));
}

Obwohl z.B. nur 2 Einträge drin sind, bekommt ich aufeinmal unendlich viele ausgaben und die App hängt dann und stürzt nach einer Weile ab.
Wenn ich diese Zeile zum Test auskommentiere:
Java:
AppConst.ARTICLE_ITEM_LIST.get(AppConst.ARTICLE_ITEM_SELECTED).getImages().add(tempImages.get(i));
dann erhalte ich nur 2 ausgaben.
Wie kann das denn sein, wenn ich die 2 Einträge zum ArrayList hinzufügen möchte, das die ArrayList tempImages auch immer mehr werden?
tempImages.size() benutze ich ja in der For Schleife also i<tempImages, also wenn tempImages auch mehr wird bei jedem Durchlauf, dann kann die Schleife ja nie beendet werden.
Keine ahnung wieso tempImages sich auch vermehrt.

Diese möglichkeit:
Java:
addAll(Collection<? extends E> c)
habe ich auch getestet, leider wird immer die ArrayList, diese ich der anderen ArrayList hinzufüge, auch vermehrt.

Edit: Ich werd das noch mal testen und sage dann bescheid.

Vielen Dank erst mal.

Gruss
 
Nachdem ich das hier ausgeführt habe:
Java:
AppConst.ARTICLE_ITEM_LIST.get(AppConst.ARTICLE_ITEM_SELECTED).getImages().addAll(tempImages);
wird tempImages immer verdoppelt obwohl ich diese ja in eine andere ArrayList hinzufügen möchte.

Mir wäre es lieber, das in einer For-Schleife zu machen:
Java:
for (int i=0; i<tempImages.size(); i++) {
    System.out.println("Title: "+tempImages.get(i).getTitle());
    AppConst.ARTICLE_ITEM_LIST.get(AppConst.ARTICLE_ITEM_SELECTED).getImages().add(tempImages.get(i));
}
aber wie gesagt, tempImages wird dadurch auch immer mehr, obwohl tempImages sich nicht verändern sollte.

Nach einiger Zeit, wenn die Schleife nicht beendet wird, bekomme ich eine Fehlermeldung und die App stürzt ab:
Java:
java.lang.OutOfMemoryError: Failed to allocate a 83070912 byte allocation with 25165824 free bytes and 72MB until OOM, max allowed footprint 82890456, growth limit 134217728
Die For-Schleife läuft einfach unendlich weiter, da tempImages sich immer verdoppelt.
Wenn z.B. tempImages 2 Einträge hat, dann wird die Größe des Arrays immer ^2 nach jedem Durchlauf.

Ich hab echt keine Ahnung, wieso tempImages auch dadurch größer wird.

Gruss
 
Also wenn tempImages größer wird, wenn du in eine andere Liste etwas einfügst, müssen ja beide auf das gleiche Objekt zeigen..
Oder du machst im Code irgendwo noch was anderes, was man hier nicht sieht..
 
Danke für die Antwort.
Stimmt, beim starten der App, weise ich tempImages die ArrayList von ....getImages() zu:
Java:
tempImages = AppConst.ARTICLE_ITEM_LIST.get(AppConst.ARTICLE_ITEM_SELECTED).getImages();
Somit hat sich auch gleichzeitig tempImages verändert, wenn ....getImages() etwas hinzugefügt bekommt.
Ich hab das jetzt so geändert, wie Du es vorgeschlagen hattest:
Java:
tempImages.addAll(AppConst.ARTICLE_ITEM_LIST.get(AppConst.ARTICLE_ITEM_SELECTED).getImages());

Jetzt funktioniert das auch endlich in der For-Schleife:
Java:
for (int i=0; i<tempImages.size(); i++) {
    AppConst.ARTICLE_ITEM_LIST.get(AppConst.ARTICLE_ITEM_SELECTED).getImages().add(tempImages.get(i));
}
Vielen Dank für die Hilfe. 🙂

Gruss
 

Zurück
Oben