Java Android:我无法在写入文件后从内部存储器中读取文件

Java Android:我无法在写入文件后从内部存储器中读取文件,java,android,gson,android-file,Java,Android,Gson,Android File,在我的android应用程序中,我序列化大对象并将其写入文件。我正在使用gson,我将文件存储到内部存储器中 如果我写一个文件并退出我的应用程序,那么如果我登录并尝试读取这个文件,我不会遇到任何问题 若我写了一个文件并试图在并没有现有应用程序的情况下读取这个文件,我就无法正确地反序列化对象。我的应用程序没有崩溃,我也没有在日志中看到任何东西,但我的对象不包含正确的数据 这些是我的读写功能 public static void objecttoJson(MyObject myObject,Stri

在我的android应用程序中,我序列化大对象并将其写入文件。我正在使用gson,我将文件存储到内部存储器中

如果我写一个文件并退出我的应用程序,那么如果我登录并尝试读取这个文件,我不会遇到任何问题

若我写了一个文件并试图在并没有现有应用程序的情况下读取这个文件,我就无法正确地反序列化对象。我的应用程序没有崩溃,我也没有在日志中看到任何东西,但我的对象不包含正确的数据

这些是我的读写功能

public static void objecttoJson(MyObject myObject,String fileName){

    Gson gson = new Gson();
    String jsonString = gson.toJson(myObject);
    try {

        FileOutputStream fos =  MyApplication.getMyContext().openFileOutput(fileName, Context.MODE_PRIVATE);
        fos.write(jsonString.getBytes());
        fos.close();
    } catch (FileNotFoundException e1) {
        e1.printStackTrace();
    } catch (IOException e){
        e.printStackTrace();
    }


public static MyObject jsontoObject(String fileName) {

    Gson gson = new Gson();

    String mystring = null;

    try {    
        FileInputStream fis =   MyApplication.getMyContext().openFileInput(fileName);
        InputStreamReader in = new InputStreamReader(fis);
        BufferedReader br = new BufferedReader(in);
        String line;
        while((line = br.readLine()) != null){
            if(result == null){
                mystring  = line;
            }
            else{
            mystring.concat(line);
            }
        }

        MyObject obj = gson.fromJson(mystring, MyObject.class);

        fos.close();
        return obj;

    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }

}

我不知道为什么我的代码在退出应用程序时工作。我检查了我的其他类并阅读了android官方网站上的内部存储,但我没有发现任何东西,我怀疑在我开始编写时有一种锁。

fos.close()
之前,添加
fos.flush()
fos.getFd().sync()
,看看这是否有帮助。FileInputStream没有flush和getFd方法,因为
fos
不是
FileInputStream
,所以我看不出问题所在
fos
是一个
FileOutputStream
,而
flush()
getFd()
FileOutputStream
上的方法。我找到了getFd()方法,但flush对fileinputstream不可用。我将尝试对writer进行flush