我正在编写我的第一个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()
。
有谁知道我怎么能解决这个问题?
提前谢谢!
答案 0 :(得分:0)
您正在创建NoteRemover
,就像普通对象一样,但NoteRemover
是Activity
(它是上下文的子类)。 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...
}
}