java - 如何获取 Android 中的首选项?

标签 java android sharedpreferences

我不明白偏好是如何运作的。

我有一项首选项 Activity 和其中的一个字段:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<EditTextPreference
    android:key = "@string/pr_rest_service_url"
    android:title = "@string/rest_service_url"
    android:summary = "%s"
    android:shouldDisableView="false"
    android:selectable="true"
    android:enabled="true"
    android:defaultValue="543543543"
    />
</PreferenceScreen>

在首选项 Activity 中,我使用此代码对其进行编辑:

public class SettingsActivity extends PreferenceActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.preferences);
    String editTextPrefKey = getString(R.string.pr_rest_service_url);
    EditTextPreference restUrlTExtEdit = (EditTextPreference) findPreference(editTextPrefKey);
    restUrlTExtEdit.getEditText().setInputType(InputType.TYPE_CLASS_TEXT);
    restUrlTExtEdit.setSummary(restUrlTExtEdit.getText());

    restUrlTExtEdit.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
        @Override
        public boolean onPreferenceChange(Preference preference, Object newValue) {
            preference.setSummary(newValue.toString());
            return true;
        }
    });

    Preference saveButton = findPreference(getString(R.string.preference_save_button));
    saveButton.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
        @Override
        public boolean onPreferenceClick(Preference preference) {
            finish();
            return true;
        }
    });
}
}

及其作品。效果很好。
现在我想从应用程序的其他部分获得偏好。我把这段代码放在MainActivity中:

String key = this.getString(R.string.pr_rest_service_url);
SharedPreferences mSharedPreferences = getSharedPreferences(key, Context.MODE_PRIVATE);
String g = mSharedPreferences.getString(key, null);

并得到null。 那么如何处理偏好呢?
或者我在启动时犯了错误,不应该使用 PreferenceActivity 作为设置屏幕?或者偏好与 Activity 相关? 那么我怎样才能得到

更新

我试过了

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
String name = sp.getString("myKey", "");

但是得到了空字符串。

最佳答案

更新:然后使用它:

SharedPreferences yourOutputdata =
context.getSharedPreferences("YourKEY", MODE_PRIVATE); // Save as YourKEY in the Activity which you're passing data to this one ...

因为这个:

String key = this.getString(R.string.pr_rest_service_url);

您实际上是从资源文件中获取字符串并将其保存到首选项中,我相信这会导致 null。

试试这个:

保存:

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = sp.edit();
editor.putString("key","your text-data here");
editor.apply();

并获得:

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
String name = sp.getString("key", "");

关于java - 如何获取 Android 中的首选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52507112/

相关文章:

java - 当我使用鼠标单击并拖动 Jframe 时如何使 Jframe 移动

android - SharedPreferences Android - 仅使用两个 Activity 保存和编辑一个字符串

java - 使用 SharedPreferences 覆盖后退按钮以保存数据

java - 尝试创建一个对象数组,数组的长度和数组中的对象均由用户确定

java - 如何强制 Maven 忽略依赖项 pom.xml 中的 <repository>

java - Android从url写入json文件

android - 如何将现有的 Android Studio 项目连接到现有的 Github 存储库

android - LibGDX ImageTextButton 当使用单独的图像文件时,所有按钮显示相同的图像

android - 即使设备处于休眠状态,AlarmManager.RTC 仍在运行

Android onSharedPreferenceChanged 在提交完成之前触发