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

如何从SharedPreferences中取出指定键存储的字符串数组?

如何从SharedPreferences中取出指定键存储的字符串数组?

嘿,我来帮你解决这个问题!SharedPreferences本身并没有直接提供存取字符串数组的API,但我们有两种常用的方法可以实现这个需求,下面给你详细讲讲:

方案一:使用getStringSet()(适合无序字符串集合)

SharedPreferences内置了getStringSet()方法来处理字符串集合的存取,如果你存储的时候用的是putStringSet(),可以这样读取:

SharedPreferences sp = getSharedPreferences("file1", Context.MODE_PRIVATE);
// 读取字符串集合,第二个参数是默认值(空集合)
Set<String> colorSet = sp.getStringSet("color_array", new HashSet<>());
// 将集合转为字符串数组
String[] colorArray = colorSet.toArray(new String[0]);

⚠️ 注意事项:

  • 这个方法返回的集合是不可修改的,如果需要修改,你得重新创建一个新的集合对象
  • Set是无序容器,如果你存储的是有序数组,用这个方法会丢失原有顺序,所以这种方法更适合无序的字符串集合场景

方案二:转为JSON字符串存储(推荐,支持有序数组)

如果需要保留数组的顺序,或者数组元素有复杂结构,把数组转成JSON字符串存储是更可靠的方案。这里分两种实现方式:

方式1:用Android自带的JSON库

先看存储逻辑(你需要先把数组存进去才能读取)

String[] colors = {"red", "blue", "green"};
SharedPreferences.Editor editor = sp.edit();
try {
    JSONArray jsonArray = new JSONArray(Arrays.asList(colors));
    editor.putString("color_array", jsonArray.toString());
    editor.apply(); // 异步提交,也可以用commit()同步提交
} catch (JSONException e) {
    e.printStackTrace();
}

读取逻辑(结合你的MainActivity代码修改)

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        SharedPreferences sp = getSharedPreferences("file1", Context.MODE_PRIVATE);
        
        // 读取字符串数组
        String jsonString = sp.getString("color_array", null);
        String[] colorArray = new String[0];
        if (jsonString != null) {
            try {
                JSONArray jsonArray = new JSONArray(jsonString);
                colorArray = new String[jsonArray.length()];
                // 遍历JSON数组转成字符串数组
                for (int i = 0; i < jsonArray.length(); i++) {
                    colorArray[i] = jsonArray.getString(i);
                }
                // 示例:如果数组不为空,把第一个元素设置给按钮
                if (colorArray.length > 0) {
                    Button btn = findViewById(R.id.button);
                    btn.setText(colorArray[0]);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
        
        dropDown();
        Button btn = findViewById(R.id.button);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                colorChange();
            }
        });
    }
    
    // 你的原有方法
    private void dropDown() { /* 你的实现代码 */ }
    private void colorChange() { /* 你的实现代码 */ }
}

方式2:用Gson库(更简洁)

Gson可以让数组和JSON的转换更省心,如果你项目里已经引入了Gson依赖,代码会更简洁:

存储逻辑

Gson gson = new Gson();
String[] colors = {"red", "blue", "green"};
String json = gson.toJson(colors);
SharedPreferences.Editor editor = sp.edit();
editor.putString("color_array", json);
editor.apply();

读取逻辑

Gson gson = new Gson();
SharedPreferences sp = getSharedPreferences("file1", Context.MODE_PRIVATE);
String json = sp.getString("color_array", null);
String[] colorArray = gson.fromJson(json, String[].class);

内容的提问来源于stack exchange,提问作者Usmii

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:34:14