【问题标题】:How to store hashmap so that it can be retained it value after a device reboot?如何存储 hashmap 以便在设备重启后保留它的值?
【发布时间】:2011-02-10 04:43:59
【问题描述】:

我想将 hashmap 对象存储在全局类中,这样即使在移动设备重启后它也能存储值。知道如何实现这个概念。

【问题讨论】:

    标签: android


    【解决方案1】:

    重启前序列化你的hashmap对象,重启后反序列化它...

    这里是序列化的示例代码..

    public void serializeMap(HashMap<String,String> hm) {
        try {
            FileOutputStream fStream = openFileOutput(namefile.bin, Context.MODE_PRIVATE) ;
            ObjectOutputStream oStream = new ObjectOutputStream(fStream);
    
            oStream.writeObject(hm);        
            oStream.flush();
            oStream.close();
    
            Log.v("Serialization success", "Success");
        } catch (Exception e) {
            Log.v("IO Exception", e.getMessage());
        }
    }   
    

    您可以通过反序列化类似地读取它....
    谢谢....

    【讨论】:

      【解决方案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】:

        对其进行序列化并将其保存在共享首选项或文件中。当然,您能否做到这一点取决于映射自和映射到的数据类型。 (例如,如果您尝试序列化视图,这将不起作用。)

        【讨论】:

          猜你喜欢
          • 2012-09-11
          • 1970-01-01
          • 2012-08-09
          • 2014-01-01
          • 2011-10-28
          • 2019-08-17
          • 1970-01-01
          • 2014-03-08
          • 1970-01-01
          相关资源
          最近更新 更多