当前位置: 首页 > 面试题库 >

Android列表中的SharedPreference

印瑾瑜
2023-03-14
问题内容

我正在尝试从SharedPreferences中的List编辑值,但某些地方出了问题。

我的SharedPreference是:

public class StepsData {
    static SharedPreferences data;
    static SharedPreferences.Editor editor;
    static final int VALUE_KEY = 0;
    static final List<String> LIST_KEY= new Vector<String>();
}

我通过以下方式使用SharedPref:

StepsData.data = getApplicationContext().getSharedPreferences("userData", MODE_PRIVATE);
StepsData.editor = StepsData.data.edit();

如果我想编辑或从VALUE_KEY中获取价值,则可以使用以下方法:

int step = StepsData.data.getInt(String.valueOf(VALUE_KEY), 0);
editor.putInt(String.valueOf(VALUE_KEY), 0).apply();

但是我在使用List时遇到问题,我获取值的代码是:

List<String> myList = (List<String>) data.getStringSet(String.valueOf(LIST_KEY),null);

和删除:

List<String> clearList = new Vector<String>();
editor.putStringSet(String.valueOf(LIST_KEY), (Set<String>) clearList).apply();

但是有一个NullPointerException。在SharedPreference的List上使用诸如“
.clear()”之类的最佳方法是什么,怎么可能从此List和size中获取值?


问题答案:

如果要将List对象存储在SharedPreference中,请使用gson库。它将用于将列表对象转换为json格式,并将该json字符串存储到sharedPref中。
首先将此行包含在gradle文件中(应用级别)

编译’com.google.code.gson:gson:2.4’

下面的代码是将类型设置为列表

Type listType = new TypeToken<List<String>>(){}.getType();

Gson gson = new Gson();

现在创建列表对象并使用gson对象并将其转换为json字符串格式

List<String> myList = new ArrayList<>();
//add elements in myList object

String jsonFormat = gson.toJson(myList,listType);  
//adding to sharedPref  
editor.put("list",jsonFormat).apply();

现在从sharedPref获取值,并将json字符串转换回List对象。

//this line will get the json string from sharedPref and will converted into object of type list(specified in listType object) 
List<String> list = gson.fromJson(sharedPref.get("list",""),listType);  
//now modify the list object as par your requirement and again do the same step of converting that list object into jsonFormat.


 类似资料:
  • 问题内容: 我正在使用的SQLite数据库表会在需要时添加列。我不想对列进行硬编码,否则会冒着更新数据库而忘记更新硬编码值的风险。如何返回表中所有列的名称?(最好在中) 问题答案: 最好是使用实例并使用查询方法 应该有列名

  • 昨天我的Nexus5收到了从到版本的更新。此后,扫描设备中可用网络的动作停止接收列表,在这种情况下,结果列表的大小为0,即使在Wifi系统设置中列出了10+个Wifi网络。 这方面的代码通常是:注册并在接收器中等待事件,如下所示: 我在API的变化主题中搜索了关于这个的内容,但是我没有看到这个功能有什么突破性的变化。 有人注意到了吗?是API中的新内容还是仅有的个别情况?

  • rank ▲ ✰ vote url 45 441 233 760 url 合并列表中的列表 可能重复的问题: Flattening a shallow list in Python Comprehension for flattening a sequence of sequences? 我想是不是有更好的方法 我可以用一个循环来做,但是除了这样做还有什么更cool的用一行来做的方法?我用redu

  • 问题内容: 蟒蛇 我有一个清单清单。喜欢 我想计算每个列表在主列表中出现了多少次。 我的输出应该像 问题答案: 只需使用来自:

  • 我有一个android布局,它有一个,里面有很多元素。在的底部有一个,然后由适配器填充。 我遇到的问题是,android将从中排除,因为已经具有可滚动的功能。我希望与内容一样长,并且主滚动视图是可滚动的。 我怎样才能达到这种行为呢? 下面是我的主要布局: 然后以编程方式将组件添加到具有ID:的linearlayour中。下面是加载到LinearLayout中的一个视图。就是这个给我卷轴带来麻烦的。

  • 问题内容: 我有一个 清单清单 : 我想转换为一个 集合, 即删除重复列表并从中创建一个仅包含 唯一 列表的新列表。 在上述情况下,所需答案将是 但是当我这样做时,它给了我错误 TypeError:无法散列的类型:“列表” 你能解决我的问题吗?提前致谢! 问题答案: 由于列表是可变的,因此不能进行哈希处理。最好的选择是将它们转换为元组并形成一个集合,像这样 我们一次遍历一个列表,将其转换为一个元组