文件消失,然后重新出现

时间:2018-01-04 14:17:01

标签: java android file mode objectinputstream

我在商店中有一个Android应用程序,可以在文件中保存一些键值对(见下文)。最近我想对应用程序进行一些小的更新(一些字体和颜色,没有逻辑),我注意到在更新的应用程序中文件丢失了。然后我卸载了应用程序并再次从Play商店安装了旧版本,数据又在那里。为什么更新版本中缺少数据?

  • 文件名和路径从未更改过。
  • 我没有对这些加载/保存方法进行任何改动
  • 该文件必须位于某处,因为无论我多久卸载一次应用程序,旧商店应用仍然可以加载它。
  • 在更新版本中,我更改了版本代码和版本号
  • 设置中的
  • allowBackup =“true”
  • compileSdkVersion是25
  • buildToolsVersion是25.0.2
  • minSdkVersion 9
  • maxSdkVersion 25
  • 我已设置以下权限
    • INTERNET
    • WRITE_OWNER_DATA
    • ACCESS_EXTERNAL_STORAGE
    • ACCESS_NETWORK_STATE

要保存我使用的文件:

public void commit() {
    OutputStream outputStream;
    try {
        File file = mContext.getFileStreamPath(FILENAME);
        if (file.exists()) {
            file.createNewFile();
        }

        outputStream = mContext.openFileOutput(FILENAME, Context.MODE_PRIVATE);
        ObjectOutputStream objectoutputstream = new ObjectOutputStream(outputStream);

        String json = new Gson().toJson(mAppsettings, AppSettings.class);
        objectoutputstream.writeObject(json);
        objectoutputstream.close();
        outputStream.close();
    } catch (IOException e) {
        LogUtils.v("Saving failed with IOException\n" + e.getLocalizedMessage());
    }
}

要加载保存的数据,我使用以下内容:

private void load() {
    InputStream inputStream;
    try {
        File file = mContext.getFileStreamPath(FILENAME);
        if (!file.exists()) {
            mAppsettings = new AppSettings();
            return;
        }

        inputStream = mContext.openFileInput(FILENAME);
        ObjectInputStream objectinputstream = new ObjectInputStream(inputStream);
        String json = (String) objectinputstream.readObject();
        mAppsettings = new Gson().fromJson(json, AppSettings.class);

        objectinputstream.close();
        inputStream.close();
    } catch (IOException e) {
        LogUtils.v("Settings: load(): IOException\n" + e.getMessage());
    } catch (ClassNotFoundException e) {
        LogUtils.v("Settings: load(): ClassNotFoundException\n" + e.getMessage());
    }
}

1 个答案:

答案 0 :(得分:0)

我更新了

  • compileSDKVersion from 25 - > 27
  • minSdkVersion from 9 - > 14
  • 删除了buildToolsVersion

并且问题不再发生。我不能告诉问题到底是什么以及为什么它不再是问题。无论如何,谢谢你的帮助!