【问题标题】:File disappears, and re-appears文件消失,然后重新出现
【发布时间】:2018-06-14 07:04:23
【问题描述】:

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

  • 文件名和路径从未改变。
  • 我没有对这些加载/保存方法进行任何更改
  • 该文件必须在某个地方,因为无论我多久卸载该应用,旧的商店应用仍然可以加载它。
  • 在更新的版本中我更改了版本代码和版本号
  • 清单中的allowBackup="true" 已设置
  • compileSdkVersion 为 25
  • buildToolsVersion 是 25.0.2
  • minSdkVersion 9
  • maxSdkVersion 25
  • 我设置了以下权限
    • 互联网
    • 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());
    }
}

【问题讨论】:

  • 你将文件存储在哪里,即路径是什么?
  • I noticed that in the updated app the file was missing.。你的意思是?应用程序(*.apk 文件)只能包含资产或原始资源中的文件。你在说哪一个>
  • @Henry 来自 mContext.getFileStreamPath(FILENAME) 的路径;是 /data/user/0/com.medizinfuchs/files/myfile。所以 FILENAME=="myfile";
  • @greenapps 1st 我安装了商店版本并且文件似乎在那里(在上面的路径中),因为所有数据都是可见的。第二,如果我使用更新的调试或签名版本更新应用程序,所有数据都将丢失,并且在 logcat 中我可以看到该文件不存在(file.exists==false)。在较旧的更新中,更新后文件仍然存在的情况总是有效。第三,如果我现在卸载更新并再次从商店安装旧版本,那么所有数据都会再次存在。
  • 那么在更新之后,您的应用程序内部存储中的一个文件在更新之前就已经存在了吗?这就是全部?路径是否相同?

标签: java android file mode objectinputstream


【解决方案1】:

我更新了

  • 从 25 -> 27 编译SDKVersion
  • minSdkVersion 从 9 -> 14
  • 删除 buildToolsVersion

并且问题不再发生。我无法说出究竟是什么问题以及为什么不再是问题。无论如何感谢所有的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    • 2016-01-31
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多