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

如何获取EditTextPreference中的链接并更新SharedPreferences存储的链接?

问题根因
  • 系统EditTextPreference组件默认会将用户输入的值写入Android系统默认的DefaultSharedPreferences存储区,而你自定义工具类中单独创建了以R.string.key命名的独立SharedPreferences文件,两处存储位置完全隔离,所以读取自定义文件自然拿不到EditTextPreference更新后的值
  • 你混淆了SharedPreferences文件名和存储键的概念,初始化SharedPreferences时将R.string.key作为文件名,后续存取数据时又将同一个值作为存储键,极易出现逻辑错误
  • 全局复用SharedPreferences.Editor实例存在隐患,Editor为单次操作对象,每次修改数据都应该重新获取实例,否则容易出现提交失败的问题
修复方案

方案1:使用默认SharedPreferences存储(推荐,适配原生Preference组件逻辑)

  1. 替换工具类中SharedPreferences初始化逻辑:
// 替换原有自定义SharedPreferences初始化代码
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
  1. 优化存取逻辑,避免复用Editor实例:
public String getfeed() {
    return preferences.getString(getString(R.string.key), "");
}

public void setfeed(String rssfeed) {
    // 每次修改都重新获取Editor实例
    SharedPreferences.Editor edit = preferences.edit();
    edit.putString(getString(R.string.key), rssfeed);
    edit.apply(); // apply为异步提交,主线程调用不会阻塞UI,比commit更适合此处场景
}

修改完成后即可正常读取到EditTextPreference中存储的最新值。

方案2:保留自定义SharedPreferences文件

如果确实需要用自定义名称的SharedPreferences文件存储Preference数据,需要在preferences.xml的根PreferenceScreen节点新增存储文件名配置:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    android:sharedPreferencesName="@string/your_custom_sp_file_name">
    <!-- 原有EditTextPreference配置保持不变 -->
    <EditTextPreference
        android:key="@string/key"
        android:title="@string/title_preferences"
        android:summary="@string/sub_title_preferences"
        android:dialogTitle="@string/popup_preferences" />
</PreferenceScreen>

注意your_custom_sp_file_name对应的值不要和存储键R.string.key重复,避免混淆,之后工具类中初始化SharedPreferences时传入该文件名即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:36:03