2016-03-09 3 views
0

Я новичок в Android. Я разрабатываю приложение, но я получил ошибку перечисленные нижеcontext.getcachedir() возвращает исключение null указателя

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) 

Вышеуказанное возврата кодирования Null Pointer Exception т.е. Контекст Null. Пожалуйста помоги!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!

+0

вы уже ответили: 'context is null'. – Droidman

+0

Да, но я не знаю, как решить –

+0

проверить, откуда приходит параметр 'context' при вызове метода, используя [@NonNull] (http://developer.android.com/reference/android/support/annotation/NonNull. html) может также помочь – Droidman

ответ

0

Naga,

Здесь проблема. cacheDir - это класс. Когда вы создаете экземпляр с помощью конструктора cacheDir(Context context), вам необходимо передать контекст приложения из любого места, откуда вы его передаете. Пока контекст не является нулевым, вы сможете использовать этот метод без исключения Null Pointer. Если вы можете отследить назад, где вы выполняете вызов метода, проблема может быть решена там. Если вы отредактируете вопрос, чтобы отразить это, мы должны уметь его указывать.