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

如何将文本框输入值与SharedPreferences存储的历史值正确存入字符串数组

问题原因

现存代码的核心错误是:没有将SharedPreferences中已存储的历史JSON字符串反序列化为字符串列表,而是直接将整个JSON串作为普通字符串追加到了新列表中,每次存储都会嵌套一层JSON序列化,最终就会出现多层转义符的异常结果。

修复后的代码
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;

// 具体业务逻辑部分
SharedPreferences mPrefs = getContext().getSharedPreferences("k-texts", Context.MODE_PRIVATE);
SharedPreferences.Editor prefsEditor = mPrefs.edit();
Gson gson = new Gson();

// 1. 读取历史存储的JSON,反序列化为列表
String historyJson = mPrefs.getString("k-text", "");
Type listType = new TypeToken<ArrayList<String>>(){}.getType();
ArrayList<String> listOfTexts;
try {
    listOfTexts = gson.fromJson(historyJson, listType);
} catch (Exception e) {
    // 解析失败(比如首次存储无历史数据)时初始化空列表
    listOfTexts = new ArrayList<>();
}

// 2. 追加本次新输入的内容
String inputText = Objects.requireNonNull(_customTextField.getText()).toString();
listOfTexts.add(inputText);

// 3. 序列化后回存到SharedPreferences
String updatedJson = gson.toJson(listOfTexts);
prefsEditor.putString("k-text", updatedJson);
prefsEditor.apply();
可选优化建议
  • 如果要限制历史记录的最大条数,可以在追加新内容后判断列表长度,超过阈值时删除最旧的第一条记录即可
  • 可根据业务需求对输入内容做去重判断,避免重复存储相同的输入值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:24:04