【发布时间】:2015-10-02 04:14:39
【问题描述】:
编辑澄清: 为什么这看起来不是一个正常的空引用是因为我已经以另一种形式使用了这个代码并且在那里没有问题。我可以从我的设备中手动删除该文件,该文件稍后将被替换。这应该由我的 try/catch 语句处理,如果文件不存在,它将为我初始化一个新对象。
此外,当我在运行 android studio 时遇到错误时,错误直接指向 FileInputStream fis = openFileInput(FILENAME);
要注意的另一件事是,当我将项目添加到我试图传递给 gson 的对象时,我没有任何问题。该对象已创建,我向其添加项目没有任何问题。
此外,作为上下文,我在为我管理数据的对象类中拥有这两个函数。我将这些对象中的一个创建为 DataManager,并使用这些函数来保存/加载(除其他外)一个包含我所有数据的对象。
当我将类放在一起时,我必须添加对象类 扩展活动
因为我事先将文件输出和文件输入作为红色函数。然而,这对我来说似乎很粗略(也许可以解释为什么我会看到这个错误......?)
编辑前的原件: 在我的 Android Studio 应用程序中,我一直在尽力利用 gson,目前我正在尝试使用 gson 保存包含多个属性的单个对象。
但是,我刚刚成功地使用相同的 gson 代码将 ArrayList 放入文件中。我可以自己删除该文件,一切都会正常工作。但是我现在正尝试将整个对象放入其中。
错误是:“java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.FileOutputStream android.content.Context.openFileOutput(java.lang.String, int)' on an null object reference”
代码如下所示:
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);
}
}
【问题讨论】: