2014-03-03 71 views
1

我試圖保存ArrayList的hashmap。我正在使用自定義的類MailMessage,它本身是可以看到的。我怎樣才能保存HashMap?我拯救/恢復地圖爲:在Android中保存ArrayList的HashMap

<code> 
HashMap<String, ArrayList<MailMessage>> emailsMap = new HashMap<String, ArrayList<MailMessage>>(); 

@Override 
    protected void onSaveInstanceState(Bundle outState) { 
     outState.putSerializable("emailsMap", emailsMap); 
     super.onSaveInstanceState(outState); 
    } 

    @Override 
    protected void onRestoreInstanceState(Bundle state) { 
     // TODO Auto-generated method stub 
     super.onRestoreInstanceState(state); 
     emailsMap = (HashMap<String, ArrayList<MailMessage>>) state.getSerializable("emailsMap"); 
    } 
</code> 

但在恢復實例狀態,我得到空地圖。可能是什麼問題?我正在挽救以正確的方式恢復?

+0

怎麼樣使用'Property'類? – Salah

+0

我總是將它們序列化爲Json,並將它們取回到gson中,但不確定它是否是絕對正確的方式 –

+0

如果稍後使用序列化,則Parcelable不會幫助您。我建議你在'MailMessage'中實現Serializable,即使它不如parcelable有效。 –

回答

0

你可以使用共享偏好設置並獲取你的hashmap。

/** 
* This method is used to set shared preferences 
* @param context Application context 
* @param key shared object key 
* @param value shared object value 
*/ 
public static void setPreferences(Context context, String key, Object value) { 
    SharedPreferences appSharedPrefs = PreferenceManager 
      .getDefaultSharedPreferences(context); 
    Editor prefsEditor = appSharedPrefs.edit(); 
    Gson gson = new Gson(); 
    String json = gson.toJson(value); 
    prefsEditor.putString(key, json); 
    prefsEditor.commit(); 
} 

/** 
* This method is used to get shared object 
* @param context Application context 
* @param key shared object key 
* @return return value, for default "" asign. 
*/ 
public static HashMap<String, ArrayList<MailMessage>> getPreferences(Context context, String key, 
     Class<HashMap<String, ArrayList<MailMessage>>> clazz) { 

    SharedPreferences appSharedPrefs = PreferenceManager 
      .getDefaultSharedPreferences(context); 

    Gson gson = new Gson(); 
    String json = appSharedPrefs.getString(key, ""); 
    if (TextUtils.isEmpty(json)) { 
     return null; 
    } 
    return (HashMap<String, ArrayList<MailMessage>>) gson.fromJson(json, clazz); 
} 

確保當你調用getPreference得到HashMap中,你的關鍵是一樣的,當你使用setSharedPrefence存儲你的對象您用過。