[英]Why do Android updates of my app erase information?
在我的应用程序中,下面的代码中有一个与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();
}
}
对于常规更新,您的用户不会丢失这些值。
我相信,丢失了存储的SharedPreference
和保存的文件数据的每个用户都被迫删除其旧应用程序,以便从Play商店安装新应用程序。 否则,您的某些键或文件格式必须已更改。
签名 :
您当然可以使用Android的“ 签名应用程序”文档来在Play商店中进行更新,但是可能有问题的用户正在使用使用您单独交付给他们的签名(例如调试模式签名)签名的应用。 这可以解释为什么他们在Play商店进行更新之前被迫卸载,从而删除了所有已保存的信息。
资料格式 :
另一种选择是,用于SharedPreference
值的Keys
可能已更改, 或者 ObjectStorage
的文件格式或类结构已更改,从而使得无法读取旧值。 对于用户而言,这似乎就像旧值消失了一样。 然后,当用户以新格式保存值时,您的应用将继续为他们正常工作。
总结 :
必须发生以下情况之一:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.