我想点击首选项清除我的应用程序的缓存。我做了这个,但它不起作用,有错误。我该如何解决?
这是整个来源。非常感谢!!!!!!
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();
}
}
.......................................
答案 0 :(得分:0)
这是我对如何解决错误的建议。
我可以让它变得更好,但它应该可以正常工作。
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's 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();
}
}