2013-02-01 95 views
2

我有一個對象列表,如果用戶最小化應用程序,需要堅持的對象列表。有沒有辦法做到這一點,而不使用SharedPreferences或SQLite數據庫(似乎對單個列表過度殺傷)?如何臨時存儲對象列表

+1

有一個開發者指南[數據存儲(https://developer.android .com/guide/topics/data/data-storage.html),它涵蓋了最流行的方式來做你想做的事情。 – Sam

回答

1

使用教程我發現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); 
    } 
} 
2

有根據您的需求對象實現ParclableSerializable

然後,你可以把它放在包

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putParcelableArrayList(key, value); 
} 

而在的onCreate拿回來(),onRestoreInstanceState()。

+0

即使在活動完成時也可以工作,例如,當操作系統決定需要更多內存時?我認爲它不會,並且如果@Tom希望下次再留它,他必須使用SQL/sharedPreferences。 –

+0

@androiddeveloper是的,它會的。 JavaDoc指出,系統可以隨時終止託管該活動的進程,而無需執行另一行代碼。因此,您應該使用onPause()方法將任何持久性數據(如用戶編輯)寫入存儲。另外,在將活動置於這種背景狀態之前調用onSaveInstanceState(Bundle)方法,允許您將活動中的任何動態實例狀態保存到給定的Bundle中,以便稍後在onCreate(Bundle)中接收,如果活動需要重新創建。' – Natix

+0

不錯。謝謝。 –