【问题标题】:How to store a list of objects temporarily如何临时存储对象列表
【发布时间】:2013-02-01 00:07:20
【问题描述】:

如果用户最小化应用程序,我有一个需要保留的对象列表。有没有办法在不使用 SharedPreferences 或 SQLite 数据库的情况下做到这一点(对于单个列表来说似乎有点矫枉过正)?

【问题讨论】:

  • Data Storage 上有一个开发者指南,它涵盖了最流行的方式来做你想做的事。

标签: java android sqlite onresume onpause


【解决方案1】:

让对象实现ParclableSerializable

然后你可以把它放在Bundle中

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

然后根据您的需要在 onCreate(),onRestoreInstanceState() 中取回它。

【讨论】:

  • 即使在 Activity 完成后它还能工作,例如当操作系统决定它需要更多内存时?我认为不会,如果@Tom 想让它下次一直保留,他必须使用 SQL/sharedPreferences。
  • @androiddeveloper 是的,它会的。 JavaDoc 声明 the process hosting the activity may killed by the system at any time without another line of its code being executed. Because of this, you should use the onPause() method to write any persistent data (such as user edits) to storage. In addition, the method onSaveInstanceState(Bundle) is called before placing the activity in such a background state, allowing you to save away any dynamic instance state in your activity into the given Bundle, to be later received in onCreate(Bundle) if the activity needs to be re-created.
【解决方案2】:

使用我找到的教程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);
   }
}

【讨论】:

    猜你喜欢
    • 2012-02-24
    • 1970-01-01
    • 2018-03-05
    • 2011-10-27
    • 2017-01-21
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    相关资源
    最近更新 更多