Java Gson,无法加载或保存。提供空对象引用
编辑澄清: 为什么这看起来不是一个正常的空引用,是因为我已经以另一种形式使用了这段代码,并且没有任何问题。我可以从我的设备中手动删除该文件,该文件稍后将被替换。这应该由我的try/catch语句来处理,如果文件不存在,它将为我初始化一个新对象 此外,当我在运行android studio时发现错误时,错误会直接指向 FileInputStream fis=openFileInput(文件名) 另一件需要注意的事情是,当我向试图传递到gson的对象添加一个项时,我没有任何问题。该对象已创建,我对向其添加项目没有任何问题 此外,作为上下文,我在一个对象类中拥有这两个函数,该对象类为我管理数据。我创建这些对象中的一个作为DataManager,并使用这些函数保存/加载(除其他外)一个包含自身所有数据的对象 当我把这个类放在一起的时候,我不得不把它添加到对象类中 扩展活动 因为我事先将fileoutput和fileinput作为红色函数。然而,这对我来说似乎非常粗略(也许可以确切地解释为什么我会看到这个错误…?) 编辑前原稿: 在我的androidstudio应用程序中,我一直在尽力利用gson,目前我正试图使用gson保存一个包含多个属性的对象 然而,我刚刚成功地使用相同的gson代码将ArrayList放入文件中。我可以自己删除那个文件,一切正常。但是,我现在尝试将整个对象放置在中 错误为:“java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法”java.io.FileOutputStream android.content.Context.openFileOutput(java.lang.String,int)” 代码如下所示:Java Gson,无法加载或保存。提供空对象引用,java,gson,Java,Gson,编辑澄清: 为什么这看起来不是一个正常的空引用,是因为我已经以另一种形式使用了这段代码,并且没有任何问题。我可以从我的设备中手动删除该文件,该文件稍后将被替换。这应该由我的try/catch语句来处理,如果文件不存在,它将为我初始化一个新对象 此外,当我在运行android studio时发现错误时,错误会直接指向 FileInputStream fis=openFileInput(文件名) 另一件需要注意的事情是,当我向试图传递到gson的对象添加一个项时,我没有任何问题。该对象已创建,我对向
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);
}
}
public void loadFromFile(){
试一试{
FileInputStream fis=openFileInput(文件名);
BufferedReader in=新的BufferedReader(新的InputStreamReader(fis));
Gson Gson=新的Gson();
// https://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/google/gson/Gson.html, 2015-09-23
Type objectType=new-TypeToken(){}.getType();
recordObject=gson.fromJson(in,objectType);
}catch(filenotfounde异常){
recordObject=新统计信息recordObject();
}
}
公共void saveinfle(){
试一试{
FileOutputStream fos=openFileOutput(文件名,0);
BufferedWriter out=新的BufferedWriter(新的OutputStreamWriter(fos));
Gson Gson=新的Gson();
toJson(recordObject,out);
out.flush();//与之前的fflush相同。缓冲区必须为空。写入后刷新。
fos.close();
}catch(filenotfounde异常){
//TODO自动生成的捕捉块
recordObject=新统计信息recordObject();
}捕获(IOE异常){
//TODO自动生成的捕捉块
抛出新的运行时异常(e);
}
}
我认为NullpointerException表示您调用“openFileForOutput”的上下文对象为null
,int)
您可能应该将上下文传递给该方法,并确保上下文已正确初始化 可能重复的