context.getcachedir()返回空指针异常

时间:2016-03-09 13:04:30

标签: android

我是Android新手。我开发了一个应用程序,但我得到了下面列出的错误

package rankingfraud.others;

import java.io.File;
import android.content.Context;

public class FileCache {

private File cacheDir;

public FileCache(Context context) {
    // Find the dir to save cached images
    if (android.os.Environment.getExternalStorageState().equals(
            android.os.Environment.MEDIA_MOUNTED))
        cacheDir = new File(
                android.os.Environment.getExternalStorageDirectory(),
                "ParseGridView");
    else
        cacheDir = context.getCacheDir();
    if (!cacheDir.exists())
        cacheDir.mkdirs();
}

public File getFile(String url) {
    String filename = String.valueOf(url.hashCode());
    // String filename = URLEncoder.encode(url);
    File f = new File(cacheDir, filename);
    return f;

}

public void clear() {
    File[] files = cacheDir.listFiles();
    if (files == null)
        return;
    for (File f : files)
        f.delete();
}

}

我在logcat中收到错误

 E/AndroidRuntime(1236): FATAL EXCEPTION: main
E/AndroidRuntime(1236): Process:pack.rankingfraud, PID: 1236

E/AndroidRuntime(1236): java.lang.NullPointerException

E/AndroidRuntime(1236): at rankingfraud.others.FileCache.<init>    (FileCache.java:18)
E/AndroidRuntime(1236): at rankingfraud.others.ImageLoader.<init>(ImageLoader.java:35)

E/AndroidRuntime(1236): at pack.rankingfraud.SingleAppInfo$GetApp.onPostExecute     

  (SingleAppInfo.java:208)

E/AndroidRuntime(1236): at pack.rankingfraud.SingleAppInfo$GetApp.onPostExecute     

  (SingleAppInfo.java:1)

  E/AndroidRuntime(1236): at android.os.AsyncTask.finish(AsyncTask.java:632)
  E/AndroidRuntime(1236): at android.os.AsyncTask.access$600(AsyncTask.java:177)
    E/AndroidRuntime(1236):at android.os.AsyncTask$InternalHandler.handleMessage

 (AsyncTask.java:645)

E/AndroidRuntime(1236):at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime(1236):at android.os.Looper.loop(Looper.java:136)
E/AndroidRuntime(1236):at android.app.ActivityThread.main (ActivityThread.java:5017)

E/AndroidRuntime(1236):at java.lang.reflect.Method.invokeNative(Native Method)

E/AndroidRuntime(1236): at java.lang.reflect.Method.invoke(Method.java:515)
E/AndroidRuntime(1236):at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run

(ZygoteInit.java:779)

E/AndroidRuntime(1236): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)

 E/AndroidRuntime(1236): at dalvik.system.NativeStart.main(Native Method)

以上编码返回空指针异常,即上下文为空。

1 个答案:

答案 0 :(得分:1)

娜迦,

这就是问题所在。 cacheDir是一个班级。使用构造函数cacheDir(Context context)实例化它时,需要从传递它的任何地方传入应用程序上下文。只要上下文不为null,您就可以使用没有Null Pointer Exception的方法。 如果您可以追溯到您执行方法调用的位置,则可以在那里解决问题。如果您编辑问题以反映这一点,我们应该能够指出它。