Clear Cache App: Почему это не работает?

Я хочу нажать на предпочтение, чтобы очистить кеш моего приложения. Я сделал это, но это не работает, и есть ошибки. Как я могу исправить?

Это весь источник. Большое спасибо!!!!!!

public class Impo extends PreferenceActivity{


Preference info;
Intent intent;
Preference cache;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.addPreferencesFromResource(R.xml.layout);


info= (Preference) this.findPreference("info");
info.setOnPreferenceClickListener( new OnPreferenceClickListener() {
 public boolean onPreferenceClick(Preference preference) {
 intent = new Intent(getBaseContext(), Info.class);
 startActivity(intent);
 return true;
 }});
cache = (Preference)this.findPreference("cache");
cache.setOnPreferenceClickListener(new OnPreferenceClickListener() {

}
}
public static void clearCache(final Context context)
{
final File cache=context.getCacheDir();
final File appDir=new File(cache.getParent());
if(appDir.exists())
 {
 // you might be able to change this whole code block to just "deleteDir(appDir)"
 final String[] children=appDir.list();
 for(final String childFilePath : children)
 if(!childFilePath.equals("lib"))
 {
 deleteDir(new File(appDir,childFilePath));
 Log.i("TAG","**************** File /data/data/APP_PACKAGE/"+childFilePath+" DELETED *******************");
 }
 }
}

public static boolean deleteDir(final File dir)
{
if(dir==null)
 return true;
if(dir.isDirectory())
 {
 final String[] children=dir.list();
 for(final String childFilePath : children)
 {
 final boolean success=deleteDir(new File(dir,childFilePath));
 if(!success)
 return false;
 }
 }
return dir.delete();
}
}

.......................................

1 ответ

здесь мое предложение о том, как исправить ваши ошибки.

я мог бы сделать это еще лучше, но он должен работать нормально.

cache.setOnPreferenceClickListener(new OnPreferenceClickListener() 
 {
 clearCache(getApplicationContext());
 }

и вот функции, фиксированные:

public static void clearCache(final Context context)
 {
 final File cache=context.getCacheDir();
 final File appDir=new File(cache.getParent());
 if(appDir.exists())
 {
 // you might be able to change this whole code block to just "deleteDir(appDir)"
 final String[] children=appDir.list();
 for(final String childFilePath : children)
 if(!childFilePath.equals("lib"))
 {
 deleteDir(new File(appDir,childFilePath));
 Log.i("TAG","**************** File /data/data/APP_PACKAGE/"+childFilePath+" DELETED *******************");
 }
 }
 }

public static boolean deleteDir(final File dir)
 {
 if(dir==null)
 return true;
 if(dir.isDirectory())
 {
 final String[] children=dir.list();
 for(final String childFilePath : children)
 {
 final boolean success=deleteDir(new File(dir,childFilePath));
 if(!success)
 return false;
 }
 }
 return dir.delete();
 }

здесь весь код класса:

public class Impo extends PreferenceActivity {

 Preference info;
 Intent intent;
 Preference cache;

 @Override
 protected void onCreate(final Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 this.addPreferencesFromResource(R.xml.layout);

 info = this.findPreference("info");
 info.setOnPreferenceClickListener(new OnPreferenceClickListener() {
 @Override
 public boolean onPreferenceClick(final Preference preference) {
 // TODO the next line is very weird. sure that what you want?
 intent = new Intent(getBaseContext(), Info.class);
 startActivity(intent);
 return true;
 }
 });
 cache = this.findPreference("cache");
 cache.setOnPreferenceClickListener(new OnPreferenceClickListener() {

 @Override
 public boolean onPreferenceClick(final Preference preference) {
 clearCache(Impo.this);
 return true;
 }
 });
 }

 public static void clearCache(final Context context) {
 final File cache = context.getCacheDir();
 final File appDir = new File(cache.getParent());
 if (appDir.exists()) {
 // you might be able to change this whole code block to just "deleteDir(appDir)"
 final String[] children = appDir.list();
 for (final String childFilePath : children)
 if (!childFilePath.equals("lib")) {
 deleteDir(new File(appDir, childFilePath));
 Log.i("TAG", "**************** File /data/data/APP_PACKAGE/" + childFilePath
 + " DELETED *******************");
 }
 }
 }

 public static boolean deleteDir(final File dir) {
 if (dir == null)
 return true;
 if (dir.isDirectory()) {
 final String[] children = dir.list();
 for (final String childFilePath : children) {
 final boolean success = deleteDir(new File(dir, childFilePath));
 if (!success)
 return false;
 }
 }
 return dir.delete();
 }
}

licensed under cc by-sa 3.0 with attribution.