2

在我的应用程序中,我在下面的代码中有一个与 FileOutputStream 一起存储的对象列表。此外,我的应用程序中的任何设置都与 SharedPreferences 一起存储。每当我第一次在 Google Play 商店上更新我的应用程序时(对于那些不熟悉该过程的人,我会上传新的 APK),所有使用该应用程序的人都会删除所有对象,并且所有设置都设置为默认值。为什么这样做?我怎样才能将对象存储在更新后不会消失的地方?

public ObjectStorage readListFromFile()
{
    ObjectStorage temp = null;
    String filename = "storefileobj";
    FileInputStream fis;
    try {
        fis = getActivity().openFileInput(filename);
        ObjectInputStream is = new ObjectInputStream(fis);
        temp = (ObjectStorage) is.readObject();
        is.close();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (StreamCorruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return temp;
}


public void updateStorage()
{

    String filename = "storefileobj";
    FileOutputStream fos;
    try {
        fos = getActivity().openFileOutput(filename, Context.MODE_PRIVATE);
        ObjectOutputStream os = new ObjectOutputStream(fos);
        os.writeObject(mainObjectList);
        os.close();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}
4

1 回答 1

1

对于正常更新,您的用户不会丢失这些值。

我相信每个丢失存储SharedPreference和保存文件数据的用户都被迫删除他们的旧应用程序,以便从 Play 商店安装新应用程序。否则,您的某些密钥或文件格式必须已更改。

签名

您当然使用了 Android 的Signing Your Applications文档以便在 Play 商店进行更新,但可能有问题的用户使用的是使用您单独交付给他们的不同签名(例如调试模式签名)签名的应用程序。这可以解释为什么他们在 Play 商店更新之前被迫卸载,从而删除了所有保存的信息。

数据格式

另一种选择可能是Keys用于更改的SharedPreference更改的文件格式或类结构ObjectStorage,从而无法读取旧值。这对用户来说似乎旧值消失了。然后,随着用户以新格式保存值,您的应用程序将继续为他们正常工作。

摘要

必须发生以下情况之一:

  1. 您的用户在重新安装之前已删除。或者,
  2. 您存储的数据格式在版本之间发生了变化。
于 2013-04-17T23:46:08.110 回答