Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的应用程序的Android更新会删除信息?_Android_Storage - Fatal编程技术网

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

为什么我的应用程序的Android更新会删除信息?,android,storage,Android,Storage,在我的应用程序中,我有一个对象列表,这些对象与下面代码中的FileOutputStream一起存储。此外,我的应用程序中的任何设置都存储在SharedReferences中。每当我第一次在Google Play store上更新我的应用程序时(对于那些不熟悉该过程的人,我会上传新的APK),所有使用该应用程序的人的所有对象都会被删除,所有设置都设置为默认值。为什么它会这样做?我如何将对象存储在更新后不会消失的地方 public ObjectStorage readListFromFile() {

在我的应用程序中,我有一个对象列表,这些对象与下面代码中的FileOutputStream一起存储。此外,我的应用程序中的任何设置都存储在SharedReferences中。每当我第一次在Google Play store上更新我的应用程序时(对于那些不熟悉该过程的人,我会上传新的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();
    }

}

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

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

签名

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

数据格式

另一种选择是,用于
共享参考
值的
可能已更改,或者
对象存储
的文件格式或类结构已更改,从而无法读取旧值。在用户看来,这就像旧值消失了一样。然后,当用户以新格式保存值时,您的应用程序将继续为其正常工作

摘要

必须发生以下情况之一:

  • 您的用户在重新安装之前已被删除。或者
  • 您存储的数据格式在版本之间发生了更改

  • 有一件事我知道用户不需要重新安装。所以我猜这意味着数据格式一定已经改变了?因为在存储数据时,我没有触及代码。