2013-01-07 41 views
1

好吧,這個煩人的問題可能是相當熟悉的,但我不知道它被稱爲以及如何解決它。當我打開我的應用程序並進入菜單並在此之後,恢復應用程序時,我丟失了所有數據。看來,android喜歡清理數據,以保持操作系統儘可能快速和穩定。建議在保存內部存儲器中的數據並在恢復應用程序之前清除任何類型的變量或返回空值時恢復它的哪種方法?我嘗試setSharedPreferences來解析一個ArrayList到一個對象,並將該對象解析爲一個字符串來保存數據並檢索它,但是我得不到Object to String異常。必須有更好的選擇。NullPointerException在恢復應用程序後

任何幫助將不勝感激。

編輯:

這是我如何檢索和存儲數據:

JSONObject data = (JSONObject) new JSONTokener(result).nextValue(); 

Helper.RAW_PEOPLE_INFO = data.getJSONArray("people"); 
Helper.PEOPLE_CONTAINER = new ArrayList<PeopleInfoStorage>(); 
for(int i = 0; i < Helper.RAW_PEOPLE_INFO.length(); i++){ 
    Helper.PEOPLE_CONTAINER.add(new PeopleInfoStorage(Helper.RAW_PEOPLE_INFO.getJSONObject(i))); 
} 

我用PEOPLE_CONTAINER的ArrayList以後使用它,當我需要它。在恢復我的應用程序之前,PEOPLE_CONTAINER ArrayList可能會被清理乾淨,所以有人可以幫助我舉一個例子說明如何將此ArrayList存儲在內部存儲器中,以便我可以從內部存儲器中檢索數據並將其放回到PEOPLE_CONTAINER ArrayList中它再次爲空。

它必須是這樣的:

@Override 
protected void onPause() { 
    if(Helper.PEOPLE_CONTAINER != null){ 
     //save the Helper.PEOPLE_CONTAINER ArrayList to the internal memory 
    } 
    super.onPause(); 
} 

@Override 
protected void onResume() { 
    if(Helper.PEOPLE_CONTAINER == null){ 
     //retrieve the data and store it back to Helper.PEOPLE_CONTAINER ArrayList 
    } 
    super.onResume(); 
} 
+2

這真的很難,以幫助不再看到相關的代碼和logcat的錯誤... – Sam

+0

好吧,讓我添加一些代碼,只要給我一些時間。 –

+0

你需要什麼類型的數據保存?如果它像Strings/ints一樣簡單,我只需從文本文件讀取/寫入。 – JuiCe

回答

1

有許多方法在應用程序中保持數據;我不打算詳談了這裏,但你應該看看這些資源:

http://developer.android.com/guide/topics/data/data-storage.html

如果你有一個數組列表,它聽起來像它可能是值得的SQLite。

+1

你先生是正確的。使用數據庫可能是最好的解決方案,因爲這個項目的JSON大小可能會改變。但我也認爲使用數據庫來存儲每個信息是避免此錯誤的常用方法。 –

2

以下是在什麼時候使用哪個存儲選項的簡要說明:

共享偏好:這些基本上是良好的,用於存儲應用程序的喜好和data.SharedPreferences的其他小位是鍵/值存儲您可以在某個密鑰下保存數據的位置。要從商店中讀取數據,您必須知道數據的關鍵。所以讀取數據變得容易。但對於大數據集,它可能會變得有點困難,因爲您必須爲數據集中的每個鍵定義唯一的鍵。例如:在SharedPreferences中存儲用於用戶登錄的會話密鑰。

內部存儲:這對存儲用戶不需要訪問的應用程序數據很有用。可能適用於存儲日誌或應用程序將創建/更新/刪除的任何內容。

SQLite:大量相同的結構化數據應該存儲在SQLite數據庫中,因爲數據庫是爲這種數據而設計的。由於數據是結構化的和由數據庫管理的,它可以查詢得到一個子集相匹配使用類似SQL的查詢語言一定的標準數據。在這裏搜索變得容易。儘管SQLite的規模可能不如專用數據庫那麼大,但對於較小的應用程序(如Android應用程序)而言,它非常快捷方便。例如:存儲您的列表視圖項目或存儲食譜應用程序的食譜。

希望這有助於!

+0

優秀信息!但可悲的是,這並沒有解決我的問題。請再次閱讀我的問題,因爲我用一些代碼示例更新了它。 –

相關問題