2014-09-25 7 views
5

Ich habe eine Schaltfläche in meiner App namens "Reset", die einen gesamten Ordner (Benutzerordner) löscht. Danach versuche ich nochmal den selben Ordner zu erstellen und beim ersten mal versuche ich es, den Ordner zu erstellen, aber beim zweiten mal versuche ich den Benutzerordner neu zu erstellen und neu zu erstellen, stürzt die App ab, weil das mkdir() hat den Ordner nicht erstellt und ich habe versucht, eine Datenbank für diesen Ordner zu erstellen. Aber das Seltsame ist, dass der Ordner nach dem Absturz erstellt wurde.mkdir() gibt nach dem Löschen des Ordners false zurück

Ich habe die Erlaubnis:

f.mkdir(); 
f.mkdirs(); 

Was könnte ich falsch machen:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

ich beide Methoden versucht haben? Irgendeine Idee?

+0

Ich habe eine Menge Fragen dazu gesehen, aber keine von ihnen hat mir geholfen. –

+1

Anstatt ** den gleichen Ordner zu löschen und neu zu erstellen **, warum leerst du ihn nicht einfach ** leer? Es ist eine intelligentere (und auch optimierte) Lösung. –

+0

Ich habe darüber nachgedacht, aber was ich will, ist total löschen alle Benutzerordner, ich nicht was ein nutzloser Ordner, auch wenn es leer ist. Ich denke, das ist eine "schmutzige" Lösung. Obwohl ich es tun werde, wenn ich es nicht beheben kann. –

Antwort

0

Ich denke, es ist, weil Sie eine Methode aufrufen, um den Ordner zu erstellen, Bevor Ordner erstellt wird, versuchen Sie, eine DB in diesem Ordner zu erstellen!

Mögliche Lösung

Versuchen Erstellen der Datenbank, nachdem der Ordner erfolgreich erstellt wurde. Überprüfen Sie beim erneuten Erstellen einer Datenbank, ob dieser Ordner/Pfad existiert.

+0

Ich habe versucht, den Ordner vorher zu erstellen, aber wie ich schon sagte, mkdir funktioniert nicht und gibt false zurück. –

+0

mkdir und mkdirs geben false zurück, wenn das Verzeichnis bereits existiert. Dies könnte ein Grund für den Fehler sein. Wenn Sie Java 7 verwenden, können Sie die Klasse Files verwenden. Es wirft eine IOException bei Fehler mit ziemlich guten Beschreibungen Files.createDirectory (file.toPath()); – Rohit

+0

Kann ich Java 7 für Android verwenden? Ich denke nicht. –

3

Ich hatte auch das gleiche Problem. Aber schließlich denke ich, dass ich eine Lösung gefunden habe (möglicherweise eine Problemumgehung).

Wenn Sie das Verzeichnis löschen, benennen Sie es um und löschen Sie es. Erstellen Sie dann normalerweise das Verzeichnis mit File.mkdirs(). Dies sollte gut funktionieren. Ich habe es in meinem Fall getestet. Es klappt!!!

public static final void renameAndDelete(File fileOrDirectory) { 
    File newFile = new File(fileOrDirectory.getParent() + File.separator 
       + "_" + fileOrDirectory.getName()); 
    fileOrDirectory.renameTo(newFile); 
    delete(newFile); 
} 
public static final void delete(File fileOrDirectory) { 
    if (fileOrDirectory.isDirectory()) 
     for (File child : fileOrDirectory.listFiles()) 
      delete(child); 

    fileOrDirectory.delete(); 
}