Я не понимаю, как работают предпочтения.
У меня есть действие с настройками и одно поле:
<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", "");
Я фактически объяснил, почему он возвращает null. Кроме того, вы ничего не сохранили, чтобы получить SharedPreference, вместо этого вы пытались получить строку ресурса, которая возвращала null. Однако обновил ответ.
Это не помогает.
name- пустая строка. Я уже зол на это. Couse на моем телефонеgetDefaultSharedPreferences()работает, на телефоне моего друга не работает. В Android Emilator это не работает.