J'essaie de créer une fonctionnalité de réinitialisation de l'application pour mon application et j'essaie de supprimer tous les fichiers du stockage interne, notamment files folder
, databases folder
et shared preferences
. Le problème est que ce n'est pas à chaque fois que j'essaie de supprimer ces dossiers, ils sont supprimés. Parfois, la fonction que j'utilise pour supprimer les fichiers renvoie false. Dans ce cas, mon application ne peut pas fonctionner correctement. Voici ce que j'utilise:Supprimer le stockage interne du dossier des bases de données
@SuppressWarnings("static-access")
public void deleteAllData(){
String cache = this.getCacheDir().toString();
Log.e("","dbPath : "+cache);
File ChFolder = new File(cache);
boolean cachee = deleteDirectory(ChFolder);
Log.e("","Database Folder Delete Success : "+cachee);
String server = rpc.getCurrentServerName(this);
int userId = rpc.getUserId(this);
String userDbPath = "/data/data/"+this.getPackageName()+"/databases/"+Integer.toString(userId)+"_"+server;
File userDbFile = new File(userDbPath);
boolean userDbFileTF = userDbFile.delete();
Log.e("","user Database Folder : "+userDbFileTF);
String sysDbPath = "/data/data/"+this.getPackageName()+"/databases/stampii_sys_tpl.sqlite";
File sysDbFile = new File(sysDbPath);
boolean sysDbFileTF = sysDbFile.delete();
Log.e("","user Database Folder : "+sysDbFileTF);
// Delete Databases Folder :
String dbPath = "/data/data/"+this.getPackageName()+"/databases/";
Log.e("","dbPath : "+dbPath);
File dbFolder = new File(dbPath);
boolean dbFold = deleteDirectory(dbFolder);
Log.e("","Database Folder Delete Success : "+dbFold);
// Delete Files Folder :
String name = this.getFilesDir().toString()+"https://stackoverflow.com/users/";
Log.e("","path : "+name);
File files = new File(name);
boolean filesFol = deleteDirectory(files);
Log.e("","filesFol : "+filesFol);
}
static public boolean deleteDirectory(File path) {
if(path.exists()) {
File[] files = path.listFiles();
if (files == null) {
return true;
}
for(int i=0; i<files.length; i++) {
if(files[i].isDirectory()) {
deleteDirectory(files[i]);
}
else {
files[i].delete();
}
}
}
return(path.delete());
}
Y at-il quelque chose que je manque et comment puis-je mettre en œuvre la fonction comme Clear Data
dans les paramètres Android qui supprimera les bases de données aussi.
Si vous regardez ma fonction 'deleteDirectory()', j'utilise la même méthode. –
Alors vous êtes ... pourquoi ne pas vous connecter le répertoire que vous essayez de supprimer, et c'est le contenu. Ensuite, consignez les fichiers lorsque vous les supprimez pour vous assurer que la méthode fonctionne et déterminez si le répertoire est réellement vide lorsque vous essayez de le supprimer. – Craigy
En fait, je fais ça et ça retourne faux quand j'essaye de les supprimer, pas toujours mais parfois. Et je n'arrive pas à comprendre pourquoi ça ne marche pas, parce que je ne fais rien de spécial. –