在我的应用程序中,我有一个与下面的代码中的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();
}
}
答案 0 :(得分:1)
对于正常更新,您的用户不会丢失这些值。
我相信,丢失其存储的SharedPreference
和已保存文件数据的每个用户都被迫删除旧应用程序,以便从Play商店安装新应用程序。否则,您的某些密钥或文件格式必须已更改。
<强>特征强>:
您当然使用Android的Signing Your Applications文档才能在Play商店中进行更新,但有问题的用户可能正在使用已签名的应用程序,该应用程序已使用不同的签名(例如调试模式签名)进行了更新他们分开。这可以解释为什么在Play商店更新之前他们被迫卸载,从而删除所有已保存的信息。
数据格式:
另一个替代方案是,用于Keys
值的SharedPreference
可能会更改 OR ObjectStorage
的文件格式或类结构发生变化,这使得它无法实现阅读旧的价值观。这对用户来说似乎旧值消失了。然后,当用户以新格式保存值时,您的应用将继续为他们正常工作。
<强>摘要强>:
必须发生下列情况之一: