2011-08-01 7 views
16

Je dois trouver un moyen d'effacer les données que mon application stocke dans le cache.Basiquement, j'utilise Fedor (Lazy load of images in ListView) mise en œuvre de la liste paresseux et je veux effacer le cache automatiquement quand j'ai par exemple 100 images chargées.Toutes les idées comment faire cela?Comment effacer le cache Android

EDIT: code:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    list=(ListView)findViewById(R.id.list); 
    adapter=new LazyAdapter(this, mStrings); 
    list.setAdapter(adapter); 

    deleteCache(this); 
    adapter.notifyDataSetChanged(); 


} 

public static void deleteCache(Context context) { 
    try { 
     File dir = context.getCacheDir(); 
     if (dir != null && dir.isDirectory()) { 
      deleteDir(dir); 
     } 
    } catch (Exception e) {} 
} 

public static boolean deleteDir(File dir) { 
    if (dir != null && dir.isDirectory()) { 
     String[] children = dir.list(); 
     for (int i = 0; i < children.length; i++) { 
      boolean success = deleteDir(new File(dir, children[i])); 
      if (!success) { 
       return false; 
      } 
     } 
    } 
    return dir.delete(); 
} 
+0

Bonjour, avez-vous la réponse? J'ai le même problème que toi. Je veux effacer le cache pour charger de nouvelles images. merci –

Répondre

33

cela supprimera le cache

public static void deleteCache(Context context) { 
    try { 
     File dir = context.getCacheDir(); 
     if (dir != null && dir.isDirectory()) { 
      deleteDir(dir); 
     } 
    } catch (Exception e) {} 
} 

public static boolean deleteDir(File dir) { 
    if (dir != null && dir.isDirectory()) { 
     String[] children = dir.list(); 
     for (int i = 0; i < children.length; i++) { 
      boolean success = deleteDir(new File(dir, children[i])); 
      if (!success) { 
       return false; 
      } 
     } 
    } 
    return dir.delete(); 
} 
+0

et comment puis-je les invoquer? – hardartcore

+0

appelle cette méthode par deleteCache (this); –

+1

ne supprime toujours pas le cache – hardartcore

4

J'espère que cela vous aide à obtenir plus

public static void trimCache(Context context) { 
    File dir = context.getCacheDir(); 
    if(dir!= null && dir.isDirectory()){ 
     File[] children = dir.listFiles(); 
     if (children == null) { 
      // Either dir does not exist or is not a directory 
     } else { 
      File temp; 
      for (int i = 0; i < children.length; i++) { 
       temp = children[i]; 
       temp.delete(); 
      } 
     } 

    } 

} 
+1

Veuillez ne pas ajouter des lignes de balises ou des signatures à vos messages. Votre nom avec un lien vers votre profil est automatiquement affiché au bas de chaque question ou réponse que vous écrivez. –

-4

Mettre au rebut l'adaptateur et fixez-la listview à une nouvelle instance de l'adaptateur (l istview perdra la position de défilement, cependant). Exemple:

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    m_adapter = new MyAdapter(this); 
     final ListView listView = (ListView) getView() 
       .findViewById(R.id.my_list); 
     listView.setAdapter(m_adapter); 
    } 
} 
+0

Comment cela se rapporte à la suppression du cache de l'application? – Tomas

0

Si vous utilisez Apache Commons IO, vous pouvez accomplir ceci avec une seule ligne (hors try-catch):

try { 
    FileUtils.deleteDirectory(context.getCacheDir()); 
} catch (IOException e) { 
    // Do some error handling 
} 
1

vous pouvez appeler le service système clearApplicationUserData() (travaillant uniquement pour> = Version KitKat)

vous pouvez donc faire une vérification pour la version et tout ira bien :) est le code ici:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
      ((ActivityManager) getActivity().getSystemService(Context.ACTIVITY_SERVICE)) 
        .clearApplicationUserData(); 
    } 
+0

Bienvenue dans StackOverflow! En plus de fournir des informations sur ce qu'il faut faire lors de l'utilisation de KitKat ou plus, veuillez également inclure des informations pour les utilisateurs utilisant une version inférieure. – buczek

+0

En fait, cette partie du code bloque complètement mon application. – Borzh

+0

Cette méthode est pour effacer ** toutes les données de l'application **, pas le cache de l'application!Selon cette [réponse] (https://stackoverflow.com/a/37086256/2416369), il est prévu que l'application se ferme, car cette méthode réinitialise l'application complètement, donc l'application ne doit pas être en cours d'exécution ... –