我有一個對象列表,如果用戶最小化應用程序,需要堅持的對象列表。有沒有辦法做到這一點,而不使用SharedPreferences或SQLite數據庫(似乎對單個列表過度殺傷)?如何臨時存儲對象列表
回答
使用教程我發現here,我使用SharedPreferences實現它,主要區別在於,我使用索引而不是使用鍵「MEM1」。當我的活動負載,我可以使用此代碼檢查索引的大小,
for(int x =0; ;x++) {
index = x;
if(sharedPreferences.contains(String.valueOf(x))){
temp = gson.fromJson(sharedPreferences.getString(String.valueOf(x), null), PointOfInterest.class);
pointList.add(temp);
}
else {
break;
}
}
例子:
public class AndroidSharedPreferencesEditor extends Activity {
EditText editText1, editText2;
TextView textSavedMem1, textSavedMem2;
Button buttonSaveMem1, buttonSaveMem2;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textSavedMem1 = (TextView)findViewById(R.id.savedmem1);
textSavedMem2 = (TextView)findViewById(R.id.savedmem2);
editText1 = (EditText)findViewById(R.id.edittext1);
editText2 = (EditText)findViewById(R.id.edittext2);
buttonSaveMem1 = (Button)findViewById(R.id.save_mem1);
buttonSaveMem2 = (Button)findViewById(R.id.save_mem2);
buttonSaveMem1.setOnClickListener(buttonSaveMem1OnClickListener);
buttonSaveMem2.setOnClickListener(buttonSaveMem2OnClickListener);
LoadPreferences();
}
Button.OnClickListener buttonSaveMem1OnClickListener
= new Button.OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
SavePreferences("MEM1", editText1.getText().toString());
LoadPreferences();
}
};
Button.OnClickListener buttonSaveMem2OnClickListener
= new Button.OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
SavePreferences("MEM2", editText2.getText().toString());
LoadPreferences();
}
};
private void SavePreferences(String key, String value){
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(key, value);
editor.commit();
}
private void LoadPreferences(){
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
String strSavedMem1 = sharedPreferences.getString("MEM1", "");
String strSavedMem2 = sharedPreferences.getString("MEM2", "");
textSavedMem1.setText(strSavedMem1);
textSavedMem2.setText(strSavedMem2);
}
}
有根據您的需求對象實現Parclable或Serializable
然後,你可以把它放在包
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelableArrayList(key, value);
}
而在的onCreate拿回來(),onRestoreInstanceState()。
即使在活動完成時也可以工作,例如,當操作系統決定需要更多內存時?我認爲它不會,並且如果@Tom希望下次再留它,他必須使用SQL/sharedPreferences。 –
@androiddeveloper是的,它會的。 JavaDoc指出,系統可以隨時終止託管該活動的進程,而無需執行另一行代碼。因此,您應該使用onPause()方法將任何持久性數據(如用戶編輯)寫入存儲。另外,在將活動置於這種背景狀態之前調用onSaveInstanceState(Bundle)方法,允許您將活動中的任何動態實例狀態保存到給定的Bundle中,以便稍後在onCreate(Bundle)中接收,如果活動需要重新創建。' – Natix
不錯。謝謝。 –
- 1. 如何將臨時表列存儲到存儲過程?
- 2. 如果不在會話中,如何臨時存儲ActiveRecord對象?
- 3. 序言:臨時列表存儲
- 4. 如何將對象存儲在臨時變量中?
- 5. 如何在rails中存儲對象的臨時屬性
- 6. 保存臨時對象
- 7. 如何將對象(從MySQL臨時表中)返回到Coldfusion存儲過程?
- 8. Java-如何將數據臨時存儲在數組列表中
- 9. 存儲/序列化對象列表
- 10. 如何INSERT INTO [臨時表] FROM [存儲過程]和SELECT * FROM [臨時表]
- 11. mysql臨時表存儲在內存中?
- 12. SQL - 臨時表:將臨時表中的所有列與只存儲主鍵
- 13. 存儲臨時值
- 14. JavaScript臨時存儲
- 15. 臨時對象
- 16. 如何保存wp7中隔離存儲中的對象列表
- 17. 如何臨時存儲使用JQuery
- 18. 如何存儲臨時數據?
- 19. 如何臨時存儲物品清單?
- 20. 如何臨時存儲數據與jQuery
- 21. Meteor中的陣列臨時存儲
- 22. 用於臨時存儲base64圖像數據的IndexedDB或javascript對象存儲?
- 23. 如何將字符串值分開,創建臨時存儲在臨時表
- 24. 的Python:存儲對象列表外部
- 25. 在鏈接列表中存儲對象
- 26. 在列表中存儲Json對象
- 27. Azure表存儲中的對象陣列
- 28. 將JSON對象存儲在臨時文件中
- 29. 如何在不聲明臨時表列的情況下將存儲過程的結果插入臨時表中
- 30. 如何使用REST API爲Swift對象存儲創建臨時URL?
有一個開發者指南[數據存儲(https://developer.android .com/guide/topics/data/data-storage.html),它涵蓋了最流行的方式來做你想做的事情。 – Sam