Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何按输入顺序保存和检索共享首选项中的数据?_Java_Android_Hashmap_Sharedpreferences - Fatal编程技术网

Java 如何按输入顺序保存和检索共享首选项中的数据?

Java 如何按输入顺序保存和检索共享首选项中的数据?,java,android,hashmap,sharedpreferences,Java,Android,Hashmap,Sharedpreferences,在java中,如何按输入顺序保存和检索共享首选项中的数据 当我在共享首选项中保存此类数据时 HashMap<Integer, String> likes = new HashMap<Integer, String>(); // THIS IS INPUT ORDER likes.put(1,"a") likes.put(2,"b") likes.put(3,"c") likes.put(4,"d") edito

在java中,如何按输入顺序保存和检索共享首选项中的数据

当我在共享首选项中保存此类数据时

 HashMap<Integer, String> likes = new HashMap<Integer, String>();

    // THIS IS INPUT ORDER

    likes.put(1,"a")
    likes.put(2,"b")
    likes.put(3,"c")
    likes.put(4,"d")
        editor = getSharedPreferences("PREFS_NAM", 0).edit();
        for (Map.Entry<Integer, String> entry : likes.entrySet())
         editor.putString(String.valueOf((entry.getKey())), 
         entry.getValue());
        editor.apply();
看起来像

(1,"a")
(2,"b")
(4,"d")
(3,"c")
哪个输入顺序不一样

试试下面的方法 Map likes=newlinkedhashmap; LinkedHashMap的设计目的是按键、值和条目的顺序保存它们。

SharedReferences是为存储和检索简单数据而设计的,即使在稍微复杂的结构中使用它们也是相当尴尬的

您似乎正在尝试存储和检索映射,并且希望迭代顺序为插入顺序。首先,您应该使用LinkedHashMap而不是普通的HashMap,因为后者不能保证迭代顺序

Map<Integer, String> likes = new LinkedHashMap<>();
然后检索:

Map<Integer, String> likes = new LinkedHashMap<>();
Map<String, ?> all = prefs.getAll();
for (int i = 0; i < all.size() / 2; i++) 
    likes.put((Integer) all.get("K" + i), (String) all.get("V" + i));

这显然很可怕,SharedReferences并不是为此而设计的,但它确实有效。

这是关于HashMaps还是SharedReferences的问题?HashMap没有排序,如果有问题,请更改集合类型…@PaulBoddington我已经修改过it@Dreamer我看见了。它仍然有点困惑,我认为你的put语句的键和值的方式是错误的,但是你要做的是明确的。你想要键的插入顺序还是数字顺序?键有时会按1、3、4、2这样的顺序进入映射吗?问题是从共享首选项hashmap而不是从hashmap检索数据时,如何将共享首选项转换为LinkedHashMap?这就是问题所在!我会尝试一下,给你答案,但我有钥匙,他们从1开始到400这不会使独特keys@Dreamer固定的无法定义get-in-likes.putInteger i.getK+i、字符串i.getV+i;SharedReferences中还有其他内容吗?没有,我有一个数组,其中包含值和这些值的序列。例如WWEW、DSD、SDSDS。序列是唯一的,我用作从字符串数组的1开始到结尾的键,字符串的值作为值
int index = 0;
for (Map.Entry<Integer, String> e : likes.entrySet()) {
     editor.putInt("K" + index, e.getKey());;
     editor.putString("V" + index, e.getValue());
     index++;
}
Map<Integer, String> likes = new LinkedHashMap<>();
Map<String, ?> all = prefs.getAll();
for (int i = 0; i < all.size() / 2; i++) 
    likes.put((Integer) all.get("K" + i), (String) all.get("V" + i));