Android - getExternalCacheDirectory在从静态方法调用后抛出nullPointerExeption

时间:2014-02-02 20:47:43

标签: java android android-activity static nullpointerexception

我正在编写我的第一个Android应用程序。我需要使用getExternalCacheDirectory()返回的路径在非静态方法中初始化文件。 以下是相关代码的第一部分:

public static void deleteNote(Integer id) {
    List<Note> savedNotes = Util.getSavedNotes();
    savedNotes.remove(id);
    NoteRemover myRemover = new NoteRemover();
    myRemover.write(savedNotes, id);
}

这是我的NoteRemover课程:

    public class NoteRemover extends Activity{
    public void write(List<Note> editedNotesList, Integer rnID) {

           //NullPointerExeption is thrown here:
            File notesDB = new File(getExternalCacheDir(), "notesDB.txt");

            String Data;

             //unimportant code

            Util.setFtpTaskFlag(2);
            Util.setFtpDirectory(Util.FTP_NOTE_DIR);
            Util.writeFile(data, notesDB);

            Util.setFtpTaskFlag(3);
            File note = new File(getExternalCacheDir(), rnID.toString()
                    + ".txt");
            Util.deleteFile(note);

            Util.setFtpTaskFlag(-1);
            Util.setFtpDirectory(null);'

        }

    }

}

这是Errormessage:

02-02 21:41:24.354: E/AndroidRuntime(6552): FATAL EXCEPTION: main
02-02 21:41:24.354: E/AndroidRuntime(6552): java.lang.NullPointerException
02-02 21:41:24.354: E/AndroidRuntime(6552):     at android.content.ContextWrapper.getExternalCacheDir(ContextWrapper.java:219)
02-02 21:41:24.354: E/AndroidRuntime(6552):     at com.stracke.bandmanager.NoteRemover.write(NoteRemover.java:11)
02-02 21:41:24.354: E/AndroidRuntime(6552):     at com.stracke.bandmanager.Notes.deleteNote(Notes.java:131)
02-02 21:41:24.354: E/AndroidRuntime(6552):     at com.stracke.bandmanager.OptionsDialogFragment.doSelectedDialogAction(OptionsDialogFragment.java:52)
02-02 21:41:24.354: E/AndroidRuntime(6552):     at com.stracke.bandmanager.OptionsDialogFragment.access$0(OptionsDialogFragment.java:25)
02-02 21:41:24.354: E/AndroidRuntime(6552):     at com.stracke.bandmanager.OptionsDialogFragment$1.onClick(OptionsDialogFragment.java:18)
02-02 21:41:24.354: E/AndroidRuntime(6552):     at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:941)
02-02 21:41:24.354: E/AndroidRuntime(6552):     at android.widget.AdapterView.performItemClick(AdapterView.java:298)
02-02 21:41:24.354: E/AndroidRuntime(6552):     at android.widget.AbsListView.performItemClick(AbsListView.java:1102)
02-02 21:41:24.354: E/AndroidRuntime(6552):     at android.widget.AbsListView$PerformClick.run(AbsListView.java:2790)
02-02 21:41:24.354: E/AndroidRuntime(6552):     at android.widget.AbsListView$1.run(AbsListView.java:3465)
02-02 21:41:24.354: E/AndroidRuntime(6552):     at android.os.Handler.handleCallback(Handler.java:730)
02-02 21:41:24.354: E/AndroidRuntime(6552):     at android.os.Handler.dispatchMessage(Handler.java:92)
02-02 21:41:24.354: E/AndroidRuntime(6552):     at android.os.Looper.loop(Looper.java:137)
02-02 21:41:24.354: E/AndroidRuntime(6552):     at android.app.ActivityThread.main(ActivityThread.java:5124)
02-02 21:41:24.354: E/AndroidRuntime(6552):     at java.lang.reflect.Method.invokeNative(Native Method)
02-02 21:41:24.354: E/AndroidRuntime(6552):     at java.lang.reflect.Method.invoke(Method.java:525)
02-02 21:41:24.354: E/AndroidRuntime(6552):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
02-02 21:41:24.354: E/AndroidRuntime(6552):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
02-02 21:41:24.354: E/AndroidRuntime(6552):     at dalvik.system.NativeStart.main(Native Method)

据我所知getExternalCacheDirectory()抛出NullPointerException。我的猜测是该方法最初是从静态方法调用的,因此会抛出异常,因为无论如何我都无法在静态方法中调用getExternalCacheDirectory()。 有谁知道我怎么能解决这个问题? 提前谢谢!

1 个答案:

答案 0 :(得分:0)

您正在创建NoteRemover,就像普通对象一样,但NoteRemoverActivity(它是上下文的子类)。 Activities应该由系统创建,因为现在这个myRemover只是一个没有任何系统连接的对象。

在某些实用程序类中创建方法:

class WriteUtils
{
    public static void write(List<Note> editedNotesList, Integer rnID, Context context)
    {
       File notesDB = new File(context.getExternalCacheDir(), "notesDB.txt");
       // and so on.. use context.get... 
    }
}