【发布时间】:2013-06-25 22:10:06
【问题描述】:
我在一个活动中使用 SharedPreferences 基本上将一堆数据存储在类似 HashMap 的方法中。特别是应用程序名称(字符串)及其各自作为类别 1、2 或 3 应用程序的排序。像这样的东西:
editor.putString("割绳子", "Category 1");
在另一个活动中,我想使用此 SharedPreference 创建一个仅包含类别 1 应用程序的 ArrayList。以下是我认为可以做到的方式:
ArrayList<String> cat1Apps = new ArrayList<String>();
SharedPreferences stored = getSharedPreferences("Sorted Apps", 0);
SharedPreferences.Editor editor = stored.edit();
Map<String, ?> mappedPreferences = stored.getAll();
for(Map.Entry<String, ?> entry: mappedPreferences.entrySet()){
if(entry.getValue().toString().equals("Category 1")){
cat1Apps.add(entry.getKey());
}
}
但由于某种原因,这不起作用。我正在使用这些应用程序名称,然后有一些代码可以创建类别 1 应用程序的 GridView 显示。如果我只是定义 cat1Apps.add() 一段时间,这很好,但如果我尝试通过上面的 SharedPreferences 导入,它不会创建 GridView。
【问题讨论】:
-
不是一个真正的解决方案,但我很确定,因为 SharedPreferences 是键/值,你只能为键“类别 1”拥有一个值,这在你的情况下意味着即使这确实有效,你也会只有一个大小为 1 的 cat1Apps 地图(其中地图中的值是最后保存的值)。
-
是不是反过来,一堆值为Category 1的key是可以接受的?
-
@scibor 是的,如果不自己运行它,它看起来应该可以工作。您是否在其中设置了断点以查看获得的值?
-
有点尴尬,我该怎么办?在 IntelliJ 中运行
-
您是否将值存储到同一个共享首选项文件中,即“已排序的应用程序”?获取 Activity 的部分与存储的 Activity 是否属于同一应用程序?