我有一個android應用程序,它存儲持續可序列化的對象,包含4個字符串數組列表。該對象存儲在內部存儲器中,每次應用程序啓動時都會恢復。它工作正常....問題是,當我在市場上推出一個新版本的應用程序,並且用戶下載並安裝較新的版本時,存儲的對象不能正確恢復,對象的四個陣列列表被恢復爲空。然後,用戶失去了以前版本的應用存儲數據。這是我必須解決的一個巨大問題。存儲(持久性)可序列化的對象不能正確地在我的應用程序的較新的市場版本中被正確地使用
這是我的序列化對象:
public class SaveState implements Serializable{
public ArrayList <String> fNumbers = new ArrayList<String>();
public ArrayList <String> fNames = new ArrayList<String>();
public ArrayList <String> favNumbers = new ArrayList<String>();
public ArrayList <String> favNames= new ArrayList<String>();
public static SaveState instance=new SaveState();
}
這些都是我用它來存儲和恢復這個持久化對象的方法:
public static void saveData(Context context){
ObjectOutput out;
try {
File directory = context.getDir(STORE_DIRECTORY, Context.MODE_PRIVATE); //primero comprobamos si existe el directorio, y si no, lo creamos.
File outFile = new File(directory, "appSaveState.data");
System.out.println("########## SAVING INTO: "+outFile.getAbsolutePath());
out = new ObjectOutputStream(new FileOutputStream(outFile));
out.writeObject(SaveState.instance);
out.close();
} catch (Exception e) {e.printStackTrace();}
}
public static void loadData(Context context){
ObjectInput in;
try {
File directory = context.getDir(STORE_DIRECTORY, Context.MODE_PRIVATE); //primero comprobamos si existe el directorio, y si no, lo creamos.
File inFile = new File(directory, "appSaveState.data");
System.out.println("########## LOADING FROM: "+inFile.getAbsolutePath());
in = new ObjectInputStream(new FileInputStream(inFile)); //intentamos cargar el fichero
SaveState.instance=(SaveState) in.readObject();
in.close();
} catch (Exception e) {e.printStackTrace();}
}
記住這個代碼工作正常,如果的版本應用程序未更新。
有什麼不對?我應該如何讓這些數據在我的應用的不同安卓市場版本之間持續存在?
謝謝
我不是這方面的專家,但我認爲序列化在某些情況下可能不一致。如果您使用像JSON或XML這樣可靠的東西,您將獲得穩定的結果。很抱歉,這對您當前的問題沒有幫助。 – Krylez 2012-08-02 08:57:41