java - 如何在 Android 中获取首选项?
问题描述
我不明白偏好是如何工作的。
我有一个偏好活动和一个字段:
<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>
在偏好活动中,我使用此代码对其进行编辑:
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
用作设置屏幕?还是与活动绑定的偏好?那我怎么能得到
更新
我试过了
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", "");
推荐阅读
- python - 计算熊猫时间序列中的连续 nan 值
- python - tensorflow 是否在同一设备上并行执行图形的独立部分?
- asp.net-core-mvc - 如果没有自定义视图模型,.Net 核心视图组件将无法工作
- android-studio - 如何使 Flutter 应用的 Navigation Drawer 透明?
- node.js - 你可以在 azure webchat 和 skype 上使用 Botkit 和 botframework 吗?
- r - R中缺失数据的百分比给出错误
- c - 如何制作一个接受 C 中两位整数或字符的菜单界面?
- sabre - Sabre 是否提供了一种获取丰富内容航班的方法
- javascript - 将状态传递给其他组件的最“反应”方式
- php - 在循环中调用 jQuery Ajax 给了我 503 错误