You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SharedPreference中存储并读取多个名称(使用FirebaseListAdapter)

解决方法:用SharedPreferences存储多个名称,结合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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:07:25