为什么我的应用的Android更新会删除信息?

时间:2013-04-17 23:23:48

标签: android storage

在我的应用程序中,我有一个与下面的代码中的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();
    }

}

1 个答案:

答案 0 :(得分:1)

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

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

<强>特征

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

数据格式

另一个替代方案是,用于Keys值的SharedPreference可能会更改 OR ObjectStorage的文件格式或类结构发生变化,这使得它无法实现阅读旧的价值观。这对用户来说似乎旧值消失了。然后,当用户以新格式保存值时,您的应用将继续为他们正常工作。

<强>摘要

必须发生下列情况之一:

  1. 您的用户在重新安装前已删除。或者,
  2. 您的存储数据格式在版本之间发生了变化。