编辑以澄清: 为什么这似乎不是正常的空引用是因为我已经以另一种形式使用了这个代码,并且在那里没有任何问题。我可以手动从我的设备中删除该文件,稍后将替换该文件。这应该由我的try / catch语句处理,如果文件不存在,它将为我初始化一个新对象。
此外,当我在运行它时在android studio中收到错误时,错误直接指向 FileInputStream fis = openFileInput(FILENAME);
另外需要注意的是,当我向我想要传递给gson的对象添加项目时,我没有任何问题。该对象已创建,我没有任何问题添加项目。
此外,作为上下文,我在一个对象类中有这两个函数来管理我的数据。我将这些对象中的一个创建为DataManager,并使用这些函数来保存/加载(包括其中)包含其自身内所有数据的对象。
当我把课程放在一起时,我不得不添加对象类 扩展活动
因为我事先将fileoutput和fileinput作为红色函数。然而,这对我来说似乎非常粗略(也许可以解释为什么我看到这个错误......?)
编辑前原创 在我的Android Studio应用程序中,我一直在尽力使用gson,目前我正在尝试使用gson保存包含多个属性的单个对象。
但是我只是成功设法使用相同的gson代码将ArrayList放入文件中。我自己可以删除该文件,一切都会正常工作。但是我现在正试图将整个对象放入。
错误是:“java.lang.NullPointerException:尝试在空对象引用上调用虚方法'java.io.FileOutputStream android.content.Context.openFileOutput(java.lang.String,int)'” p>
代码如下所示:
public void loadFromFile() {
try {
FileInputStream fis = openFileInput(FILENAME);
BufferedReader in = new BufferedReader(new InputStreamReader(fis));
Gson gson = new Gson();
// https://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/google/gson/Gson.html, 2015-09-23
Type objectType = new TypeToken<StatisticsRecordObject>() {}.getType();
recordObject = gson.fromJson(in, objectType);
} catch (FileNotFoundException e) {
recordObject = new StatisticsRecordObject();
}
}
public void saveInFile() {
try {
FileOutputStream fos = openFileOutput(FILENAME, 0);
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(fos));
Gson gson = new Gson();
gson.toJson(recordObject, out);
out.flush(); //same as fflush as before. Buffer must go. FLUSH AFTER WRITING.
fos.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
recordObject = new StatisticsRecordObject();
} catch (IOException e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);
}
}
答案 0 :(得分:0)
我认为NullpointerException表示您调用“openFileForOutput”的上下文对象为null
http://developer.android.com/reference/android/content/Context.html#openFileOutput(java.lang.String,int)
您应该将上下文传递给方法,并确保上下文已正确初始化。