我正在尝试以编程方式清除我的应用数据。但我得到一个NullPointerEXception
以下代码。
这是我的代码: -
public class MyApplication extends Application {
private static MyApplication instance;
@Override
public void onCreate() {
super.onCreate();
instance = this;
}
public static MyApplication getInstance(){
return instance;
}
public void clearApplicationData() {
File cache = getCacheDir();
File appDir = new File(cache.getParent());
if(appDir.exists()){
String[] children = appDir.list();
for(String s : children){
if(!s.equals("lib")){
deleteDir(new File(appDir, s));
Log.i("TAG", "**************** File /data/data/APP_PACKAGE/" + s +" DELETED *******************");
}
}
}
}
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();
}
}
我尝试做的时候得到NullPointerException
: -
File cache = getCacheDir();
我该如何解决这个问题?
答案 0 :(得分:4)
尝试以下代码: -
File cache = getApplicationContext().getCacheDir();
发生此错误是因为getCacheDir()
函数需要应用程序的上下文。
答案 1 :(得分:2)
使用
File cache = mContext.getCacheDir();
即。重写clearApplicationData
函数并传递活动上下文,因为getCacheDir()
函数需要上下文
public void clearApplicationData(Context mContext) {
File cache = mContext.getCacheDir();
File appDir = new File(cache.getParent());
if(appDir.exists()){
String[] children = appDir.list();
for(String s : children){
if(!s.equals("lib")){
deleteDir(new File(appDir, s));
Log.i("TAG", "**************** File /data/data/APP_PACKAGE/" + s +" DELETED *******************");
}
}
}
}
答案 2 :(得分:0)
我认为这个错误是因为你还没有让这个类成为真正的Application类。
检查清单,即&#34; android:name&#34; &#34;应用程序&#34;的属性tag已正确设置为引用此类。
为了检查它是否已初始化,请在&#34; onCreate()&#34;中写入日志。方法
此外,你应该只调用&#34; clearApplicationData()&#34;通过使用:&#34; MyApplication getInstance()&#34;首先,或者使用&#34;((MyApplication)getApplicationContext())&#34;
另外,请注意这个&#34;设计模式&#34;应用程序上下文适用于99%的案例。当你有一个内容提供者时,它唯一无法工作的情况是,因为在这种情况下应用程序类不会被初始化。
如果这不是导致错误的原因,请尝试调试代码,看看它是否真的进入此行并在那里崩溃。