如何在SharedPreference中存储并读取多个名称(使用FirebaseListAdapter)
嘿,我来帮你搞定这个问题!你现在能存单个名称,但要存10个的话,得换个思路——SharedPreferences没法直接存储集合,所以我们可以把名称集合转成JSON字符串来存储,之后再解析回来。再结合FirebaseListAdapter的话,具体步骤如下:
一、将名称集合转为JSON格式存入SharedPreferences
这里有两种简单的实现方式,选你顺手的来:
方法1:用Gson库(代码更简洁)
如果你的项目已经引入了Gson依赖,直接把List转成JSON字符串即可:
// 先准备好包含10个名称的集合 List<String> namesList = new ArrayList<>(); namesList.add("Homer Simpson"); namesList.add("Marge Simpson"); // ... 把剩下的8个名称也添加进来 // 将集合转为JSON字符串 String namesJson = new Gson().toJson(namesList); // 存入SharedPreferences mSharedPref.edit().putString("newuser", namesJson).apply();
方法2:用原生JSONArray(无需额外依赖)
不想引入第三方库的话,用Android自带的JSONArray也能搞定:
List<String> namesList = new ArrayList<>(); // 添加所有名称... JSONArray jsonArray = new JSONArray(); for (String name : namesList) { jsonArray.put(name); } String namesJson = jsonArray.toString(); // 存入SharedPreferences mSharedPref.edit().putString("newuser", namesJson).apply();
二、从SharedPreferences读取并解析所有名称
存好之后,在onStart()方法里读取JSON字符串,再解析回List就能拿到所有名称了:
对应Gson的解析代码
@Override protected void onStart() { super.onStart(); String namesJson = mSharedPref.getString("newuser", null); if (namesJson != null) { // 将JSON字符串转回List<String> List<String> namesList = new Gson().fromJson(namesJson, new TypeToken<List<String>>(){}.getType()); // 逐个打印所有名称 for (String name : namesList) { Log.e("ONSTARTUSER", name); } // 也可以直接打印整个集合 Log.e("ONSTARTUSER", "所有名称:" + namesList.toString()); } }
对应原生JSONArray的解析代码
@Override protected void onStart() { super.onStart(); String namesJson = mSharedPref.getString("newuser", null); if (namesJson != null) { try { JSONArray jsonArray = new JSONArray(namesJson); List<String> namesList = new ArrayList<>(); for (int i = 0; i < jsonArray.length(); i++) { namesList.add(jsonArray.getString(i)); } // 逐个打印名称 for (String name : namesList) { Log.e("ONSTARTUSER", name); } } catch (JSONException e) { e.printStackTrace(); } } }
三、结合FirebaseListAdapter收集并存储名称
如果你是通过FirebaseListAdapter从Firebase获取这10个名称,可以在Adapter加载数据时收集所有名称,等全部加载完成后再存入SharedPreferences:
// 初始化FirebaseListAdapter FirebaseListAdapter<String> adapter = new FirebaseListAdapter<String>( this, String.class, android.R.layout.simple_list_item_1, FirebaseDatabase.getInstance().getReference().child("你的名称节点路径") ) { // 用来收集所有名称的集合 private List<String> namesList = new ArrayList<>(); @Override protected void populateView(View v, String model, int position) { // 将当前加载的名称加入集合 namesList.add(model); // 当加载到最后一个项时,把整个集合存入SharedPreferences if (position == getCount() - 1) { String namesJson = new Gson().toJson(namesList); mSharedPref.edit().putString("newuser", namesJson).apply(); } // 正常更新列表UI ((TextView) v.findViewById(android.R.id.text1)).setText(model); } };
这样等FirebaseListAdapter把所有10个名称加载完成后,就会自动将整个集合存入SharedPreferences,之后你在onStart()里读取就能拿到所有名称啦!
内容的提问来源于stack exchange,提问作者Gastón Saillén
相关产品推荐
相关产品推荐

