【问题标题】:context.getcachedir() returns null pointer exceptioncontext.getcachedir() 返回空指针异常
【发布时间】:2016-03-09 13:04:29
【问题描述】:

我是 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)

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

【问题讨论】:

  • 你已经回答了:context is null
  • 是的,但我不知道如何解决
  • 在调用方法时检查context参数的来源,使用@NonNull注解也可能有帮助
  • 如何使用 NonNull 表示法
  • @Naga,你在哪里调用该方法。请添加您调用该方法并传入上下文的代码。

标签: android


【解决方案1】:

娜迦,

这就是问题所在。 cacheDir 是一个类。当您使用构造函数 cacheDir(Context context) 实例化它时,您需要从您传递它的任何地方传递应用程序上下文。只要上下文不为空,您就可以在没有空指针异常的情况下使用该方法。 如果您可以追溯您在哪里进行方法调用,那么问题可以在那里解决。如果您编辑问题以反映这一点,我们应该能够指出它。

【讨论】:

    猜你喜欢
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    相关资源
    最近更新 更多