【问题标题】:how to store and retrieve (key,value) kind of data using saved preferences android如何使用保存的首选项android存储和检索(键,值)类型的数据
【发布时间】:2011-12-30 09:26:15
【问题描述】:

我有一个如下的哈希映射表,

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

我想存储这些值以备将来使用.. 我该怎么做?

编辑:
我将存储国家名称和货币值作为键值对...

【问题讨论】:

  • 使用迭代器,将键一个一个放好
  • 除了迭代别无他法?
  • 很遗憾!尽管有一种方法可以一次将它们全部放入哈希图中,但您必须将它们一个一个放入。 ):

标签: android hashmap sharedpreferences


【解决方案1】:

您应该只使用一个 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-object 是为货币保留的):

SharedPreferences prefs = getSharedPreferences(PREFS_NAME, 0);

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

【讨论】:

  • 看起来很方便.. 但我得到“只能迭代数组或 java.lang.Iterable 的实例”语法错误
  • 是的。如果您只将货币保存到此 SharedPreferences 对象中(或有一个专门用于该目的),您可以使用 SharedPreferencesgetAll() 方法将它们全部取回,该方法将为您提供 Map&lt;String, ?&gt;
  • 我的错 - 你需要在你的 HashMap 上调用方法 entrySet()。我在上面进行了编辑以显示正确的语法。
【解决方案2】:

要存储值,请使用此代码

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

【讨论】:

【解决方案3】:

有几种不同的方法可以解决这个问题。除了您想要将 HashMap 存储到 SharedPreferences 的信息之外,没有什么可做的了,我只能做出假设。

我要问的第一件事是您是否还会在 SharedPreferences 中存储其他内容 - 我假设您会这样做。

以下是我的处理方法:

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

你可能想看看 stringify 做了什么:

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

【讨论】:

    【解决方案4】:

    您可以像这样使用 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");
    

    但是,您必须在 SharedPreferences 中保存已保存值的键列表,以便在检索它们时轻松获取值。

    【讨论】:

      【解决方案5】:

      您可以使用 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>);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-27
        • 1970-01-01
        • 2023-03-12
        • 1970-01-01
        相关资源
        最近更新 更多