TomSelleck
TomSelleck

Reputation: 6968

How to store a list of objects temporarily

I have a list of objects which need to persist should the user minimize the app. Is there any way to do this without using SharedPreferences or an SQLite database (seems like overkill for a single list)?

Upvotes: 2

Views: 1153

Answers (2)

TomSelleck
TomSelleck

Reputation: 6968

Using a tutorial I found here, I implemented it using SharedPreferences, the main difference was that instead of using a key ,"MEM1", I use an Index. When my activity loads, I can check the size of the index using this code,

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;
    }
}

Example:

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);
   }
}

Upvotes: 1

wtsang02
wtsang02

Reputation: 18873

Have the object implement Parclable or Serializable

Then you can just put it in the Bundle

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

And get it back in onCreate(),onRestoreInstanceState() depending on your needs.

Upvotes: 2

Related Questions