Java Gson,无法加载或保存。提供空对象引用

Java Gson,无法加载或保存。提供空对象引用,java,gson,Java,Gson,编辑澄清: 为什么这看起来不是一个正常的空引用,是因为我已经以另一种形式使用了这段代码,并且没有任何问题。我可以从我的设备中手动删除该文件,该文件稍后将被替换。这应该由我的try/catch语句来处理,如果文件不存在,它将为我初始化一个新对象 此外,当我在运行android studio时发现错误时,错误会直接指向 FileInputStream fis=openFileInput(文件名) 另一件需要注意的事情是,当我向试图传递到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)”

代码如下所示:

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)

您可能应该将上下文传递给该方法,并确保上下文已正确初始化

可能重复的