getCacheDir()android的NullPointerException

时间:2014-06-23 07:20:03

标签: java android nullpointerexception singleton

我正在尝试以编程方式清除我的应用数据。但我得到一个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();

我该如何解决这个问题?

3 个答案:

答案 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%的案例。当你有一个内容提供者时,它唯一无法工作的情况是,因为在这种情况下应用程序类不会被初始化。

如果这不是导致错误的原因,请尝试调试代码,看看它是否真的进入此行并在那里崩溃。