2011-11-16 93 views
3

我有如下的哈希映射表類型的數據,如何存儲和檢索(鍵,值)使用保存的首選項的Android

HashMap<String, String> backUpCurency_values = new HashMap<String, String>(); 

,我想儲存以備將來使用這些值..怎麼能我那樣做?

編輯:
我將存儲國名和currencyvalue作爲鍵值對...

+0

使用迭代器,並把鑰匙逐個 –

+0

其他沒有別的辦法比迭代? – vnshetty

+0

不幸的是!儘管有一種方法可以一次將它們全部加入到HashMap中,但您必須逐一完成。 ): –

回答

6

你應該只使用一個for-each循環,並通過地圖像迭代此:

SharedPreferences.Editor editor = getSharedPreferences(PREFS_NAME, 0).edit(); 

for(Entry<String, String> entry : backUpCurency_values.entrySet()) 
    editor.putString(entry.getKey(), entry.getValue()); 

editor.commit(); 

然後,當你需要讓你的價值觀回來以後使用你做下面的(只要該SharedPreference對象是保留給貨幣):

SharedPreferences prefs = getSharedPreferences(PREFS_NAME, 0); 

for(Entry<String, ?> entry : prefs.getAll().entrySet()) 
    backUpCurency_values.put(entry.getKey(), entry.getValue().toString()); 
+0

它看起來很方便..但我得到了「只能遍歷數組或java.lang.Iterable的一個實例」synax error – vnshetty

+0

就是這樣。並且,如果您只將貨幣保存到此SharedPreferences對象中(或專門用於此目的),則可以使用'SharedPreferences'的'getAll()'方法將它們全部取回,該方法將爲您提供一個'Map '。 – kaspermoerch

+0

我的不好 - 你需要在你的'HashMap'上調用'entrySet()'方法。我編輯上面顯示正確的語法。 – kaspermoerch

1

您可以使用SharedPreferences。

settings = getSharedPreferences(PREFS_NAME, 0); 
SharedPreferences.Editor editor = settings.edit(); 

//The below step you can repeat to put all the key value pair from the hashmap to the shared preference 

editor.putString("Key", Value); 

// Commit the edits! 
editor.commit(); 

,並檢索以後使用

SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
boolean silent = settings.getString(<Key>, <defaultvalue>); 
0

您可以使用SharedPreference這樣的:

SharedPreferences s_pref=PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
Editor edit=s_pref.edit(); 

edit.putString("key","value"); 
edit.commit(); 

後,你可以用它喜歡:

String s=s_pref.getString("key","default value"); 

但是,你必須有你已經保存的值wi的密鑰列表然後放入SharedPreferences中,以便在檢索時可以輕鬆獲取值。

1

有幾種不同的方法可以解決這個問題。除了您想要將HashMap存儲到SharedPreferences的信息之外,我只能做出假設。

我要問的第一件事是你是否會在SharedPreferences中存儲其他東西 - 我會假設你會的。

這裏是我會怎麼處理它:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 
    SharedPreferences.Editor editor = prefs.edit(); 
    editor.putString("backUpCurency", stringify(backUpCurency_values)); 
    editor.commit(); 

您可能想看看字符串化的功能:

// turns a HashMap<String, String> into "key=value|key=value|key=value" 
    private String stringify(HashMap<String, String> map) { 
     StringBuilder sb = new StringBuilder(); 
     for (String key : map.keySet()) { 
      sb.append(key).append("=").append(map.get(key)).append("|"); 
     } 
     return sb.substring(0, sb.length() - 1); // this may be -2, but write a unit test 
    } 

然後,你可以解析與已知結構的字符串在讀取共享偏好後來。

private HashMap<String, String> restoreIt() { 
     SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 
     String backup = settings.getString("backUpCurency", ""); 
     HashMap<String, String> map = new HashMap<String, String>(); 
     for (String pairs : backup.split("|")) { 
     String[] indiv = pairs.split("="); 
     map.put(indiv[0], indiv[1]); 
     } 
     return map; 
    } 
0

要存儲的值,用這個代碼

SharedPreferences preferences = getSharedPreferences(
      PREF_FILE_NAME, MODE_PRIVATE); 
    if (value.equals("")) { 

     boolean storedPreference = preferences.contains(key); 
     if (storedPreference) { 
      SharedPreferences.Editor editor = preferences.edit(); 
      editor.remove(key); // value to store 
      Log.d("KEY",key); 
      editor.commit(); 
     } 
    }else{ 

     SharedPreferences.Editor editor = preferences.edit(); 
     editor.putString(key, value); // value to store 
     Log.d("KEY",key); 
     editor.commit(); 
    } 

要檢索的值,用這個代碼

SharedPreferences preferences = getSharedPreferences(
      PREF_FILE_NAME, MODE_PRIVATE); 
    Map<String, String> map = (Map<String, String>) preferences.getAll(); 
    if(!map.isEmpty()){ 
     Iterator<Entry<String, String>> iterator = map.entrySet().iterator(); 
     while(iterator.hasNext()){ 
      Map.Entry pairs = (Map.Entry)iterator.next(); 
       pairs.getKey()+pairs.getValue(); 
         //write code here 
     } 
    } 
+0

我已經嘗試從這裏的代碼.. http:// stackoverflow。com/questions/4953466/how-to-store-hashmap-so-it-it-can-be-retain-it-value-after-a-device-reboot但是沒有人真的爲我着迷...... – vnshetty

+0

它正在爲我會粘貼你的代碼,以便我們糾正錯誤。 –

相關問題