Logische Hilfe benötigt (Löschen/Speichern dauert zu lange)

  • Antworten:3
  • Bentwortet
Gelöschter Account
  • Forum-Beiträge: 2.492

27.07.2014, 12:25:52 via Website

Hallo,

ich benötige einmal eure Hilfe da meine Umsetzung mir etwas zu lange dauert.
Und zwar habe ich zwei Listen mit drawables drin. Eine ist die drawableListeLinks und die andere die drawableListeRechts.
In jede können bis zu 20 Drawables hinzugefügt werden.
Die drawables werden in einem ImageView (eins Links eins Rechts) angezeigt und durch ein einfaches Klicken auf das ImageView wird das nächste Bild aus der Liste angezeigt.
Mit einem '-' Button kann das aktuell angezeigte Bild/Drawable aus der Liste gelöscht werden. (Mit einem '+' können neue drawables zu der Liste hinzugefügt werden).
Die drawables speichere ich im internen Speicher in einem Ordner "linkenBilder"/"rechtenBilder" mit folgender Methode:

private String saveToInternalSorage(Bitmap bitmapImage, int i, boolean b){
    File mypath = null;
    if(b){
        mypath=new File(linkenBilder,""+i);//Ordner linkenBilder + Counter
    } else if(!b){
        mypath=new File(rechtenBilder,""+i);//Ordner rechtenBilder + Counter
    }
    FileOutputStream fos = null;
    try {
        fos = new FileOutputStream(mypath);
        //Bild wird über den FileOutputStream in dem Path gespeichert
        bitmapImage.compress(Bitmap.CompressFormat.JPEG, 100, fos);
        fos.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Das klappt alles einwandfrei nur habe ich ein Problem wenn ich ein Bild löschen will, da mir das alles zu lange dauert.
Und zwar mache ich das folgendermaßen
z.B. 15 Bilder sind in der linken Liste und Bild 9 wird gelöscht. So geht dann meine App vor:
- das drawable 9 wird aus der Liste gelöscht (dauert denke ich mal nicht lange)
- dann werden alle Bilder im Ordner linkenBilder ab der Zahl 9 gelöscht (das könnte lange dauern, Methode steht unten)
- dann werden alle drawables der Liste ab Zahl 9 im Ordner linkenBilder gespeichert (dann ist das gewünschte Bild das gelöscht werden soll ja nicht mehr dabei) (das könnte auch lange dauern, Methode steht oben)

private void deleteInternalStorage(boolean b, int counter) {
    // TODO Auto-generated method stub
        if(b){
            if(linkenBilder.isDirectory()){
                String[] bilder = linkenBilder.list();
                if(bilder != null){
                    for(int i = counter; i < bilder.length; i++){
                        new File(linkenBilder, bilder[i]).delete();
                    }
                }
            }
        } else if(!b){
            if(rechtenBilder.isDirectory()){
                String[] bilder = rechtenBilder.list();
                if(bilder != null){
                    for(int i = counter; i < bilder.length; i++){
                        new File(rechtenBilder, bilder[i]).delete();
                    }
                }
            }
        }
}

Ich vermute das Problem ist, dass das gewünschte Bild gelöscht wird, aber auch die folgenden und dann die folgenden Bilder wieder gespeichert werden, sodass das gewünschte Bild weg ist.
Ich hab das jetzt so gemacht, damit der counter i der beim speichern hinten angehängt wird, nicht irgendwann unendlich groß wird bei ständigem speichern löschen und so weiter.
Habt ihr eine Idee, wie ich das alles etwas beschleunigen kann?

— geändert am 27.07.2014, 12:29:50

Antworten
Stefan W
  • Forum-Beiträge: 424

27.07.2014, 19:15:38 via Website

Sind die Bilder denn sortiert ? Denn wenn die Sortierung keine Rolle spielt, kannst du einfach das letzte Bild in die Lücke verschieben.

EDIT:
Was mir noch eingefallen ist, wie wäre es mit umbenennen der Files ?

— geändert am 28.07.2014, 11:25:13

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.492

28.07.2014, 16:35:34 via Website

Ja die Bilder sollten eigentlich sortiert bleiben, dann ist es ordentlicher.

Wie genau meinst du das? An welcher Stelle soll ich die umbenennen?

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.492

28.07.2014, 19:13:34 via Website

Das Umbennen der Files war der richtige Weg ;)
Beim Löschen z.b. des Bildes 9 benenne ich jetzt einfach alle nachfolgenden um eine Zahl weniger.

Danke für die Idee! :)

Antworten