SharedPreferences из разных видов деятельности
Я загружаю из действия A SharedPreferences следующим образом:
private void SavePreferences(String key, String value){
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(key, value);
editor.commit();
}
В действии B я хочу загрузить SharedPreferences. Следующим было исключение NullPointerException:
private void LoadPreferences(){
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
data = sharedPreferences.getString("name", "08:00") ;
}
Если я попытаюсь следовать, я получаю эту ошибку компиляции: "Нет экземпляра экземпляра типа A доступен в области видимости"
private void LoadPreferences(){
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(A.this);
data = sharedPreferences.getString("name", "08:00") ;
}
Как я могу получить доступ к данным?
Ответы
Ответ 1
используйте getApplicationContext()
вместо this
в обоих действиях как:
В действии A SharedPreferences следующим образом:
private void SavePreferences(String key, String value){
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(key, value);
editor.commit();
Intent sd=new Intent(this,Secongtess.class);
startActivity(sd);
}
и в действии B получить значение как:
private void LoadPreferences(){
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
String data = sharedPreferences.getString("name", "08:00") ;
Toast.makeText(this,data, Toast.LENGTH_LONG).show();
}
потому что, как говорит doc:
getDefaultSharedPreferences (контекст контекста):
Получает экземпляр SharedPreferences, который указывает на файл по умолчанию, который используется структурой предпочтений в данном контексте.
Ответ 2
Чтобы сохранить значения в общих настройках:
SharedPreferences preferences==PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor=preferences.edit();
editor.putString("Name","Harneet");
editor.commit();
Чтобы получить значения из общих настроек:
SharedPreferences preferences==PreferenceManager.getDefaultSharedPreferences(this);
String name=preferences.getString("Name","");
if(!name.equalsIgnoreCase(""))
{
name=name+" Sethi"; /* Edit the value here*/
}
Для редактирования данных из sharedpreference
SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
editor.putString("text", mSaved.getText().toString());
editor.putInt("selection-start", mSaved.getSelectionStart());
editor.putInt("selection-end", mSaved.getSelectionEnd());
editor.commit();
Чтобы получить данные из общих предпочтений
SharedPreferences prefs = getPreferences(MODE_PRIVATE);
String restoredText = prefs.getString("text", null);
if (restoredText != null)
{
//mSaved.setText(restoredText, TextView.BufferType.EDITABLE);
int selectionStart = prefs.getInt("selection-start", -1);
int selectionEnd = prefs.getInt("selection-end", -1);
/*if (selectionStart != -1 && selectionEnd != -1)
{
mSaved.setSelection(selectionStart, selectionEnd);
}*/
}