Общие настройки Android
Мне нужно делиться предпочтениями, используя класс sharedpreferences в android, и предпочтения должны делиться между двумя действиями. Как передать эти предпочтения от одной активности к другой деятельности? Статические переменные могут использоваться, но они не работают для меня.
//code for setting shared preferences
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putString("login_session_key",response.getLogin_Session_Key());
editor.putString("user_name", username.getText().toString());
editor.commit();
//code for getting shared preferences
SharedPreferences settings = getSharedPreferences(SignIn.PREFS_NAME,
Activity.MODE_PRIVATE);
username = (TextView) findViewById(R.id.username);
String uname = settings.getString("user_name", null);
username.setText(uname);
Ответы
Ответ 1
Вы должны либо передать их в действие через вызов намерения, либо вы должны прочитать те, которые вам нужны в новом действии.
Создайте вспомогательный класс, который обрабатывает все вызовы общих предпочтений для всех ваших действий. Затем создайте экземпляр экземпляра для любой активности, которая должна сохранять/получать предпочтение.
public class AppPreferences {
public static final String KEY_PREFS_SMS_BODY = "sms_body";
private static final String APP_SHARED_PREFS = AppPreferences.class.getSimpleName(); // Name of the file -.xml
private SharedPreferences _sharedPrefs;
private Editor _prefsEditor;
public AppPreferences(Context context) {
this._sharedPrefs = context.getSharedPreferences(APP_SHARED_PREFS, Activity.MODE_PRIVATE);
this._prefsEditor = _sharedPrefs.edit();
}
public String getSmsBody() {
return _sharedPrefs.getString(KEY_PREFS_SMS_BODY, "");
}
public void saveSmsBody(String text) {
_prefsEditor.putString(KEY_PREFS_SMS_BODY, text);
_prefsEditor.commit();
}
}
Затем в вашей деятельности...
public class MyActivity extends Activity {
private AppPreferences _appPrefs;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
_appPrefs = new AppPreferences(getApplicationContext());
// ...
}
}
и
String someString = _appPrefs.getSmsBody();
или
_appPrefs.saveSmsBody(someString);
Ответ 2
Когда-либо думал о просмотре Android Developer Guide, который обрабатывает эту тему?
Используйте метод getSharedPreferences (String name, int mode) с тем же именем файла, если вы хотите делиться предпочтениями между вашими действиями (иметь посмотрите на JavaDoc).
Ответ 3
Я думаю, что ключ является мгновенным SharedPreference, как этот
SharedPreference preferences = PreferenceManager.getDefaultSharedPreferences(mContext);
Лично я использую эту библиотеку, он заботится обо всей тяжелой работе с sharedPreferences и делает ее доступной во всех действиях.
Ответ 4
https://github.com/deviant-studio/Gendalf
Просто попробуйте эту библиотеку.
// before
final String ageKey = "age";
final String userNameKey = "userName";
final String adminKey = "admin";
SharedPreferences prefs = getSharedPreferences("custom_prefs", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putInt(ageKey, 12);
editor.putString(userNameKey, "Luke");
editor.putBoolean(adminKey,true);
editor.apply();
// after
Gendalf.with(this)
.setAge(12)
.setUserName("Luke")
.setAdmin(true);
Ответ 5
Если это всего лишь два действия, вы можете использовать Bundle для передачи значений. Для более чем двух действий рекомендуется использовать SharedPreferences.
Вот пример использования Bundle для передачи значений:
String sample="Hello World!";
Bundle b=new Bundle();
b.putString("key_sample",sample);
Intent intent_sample=new Intent(this,Activity_Sample.class);
intent_sample.putExtras(b);
startActivity(intent_sample);
Чтобы получить переданные значения:
try{
Bundle get_bundle=getIntent().getExtras();
String get_string=get_bundle.getString("key_sample");
}catch(Exception e){
e.printStackTrace();
}
Проверьте это: http://www.codestacks.in/2013/03/bundle-values-activities/
Пример SharedPreferences:
public class SharedPreferencesDemo extends Activity {
SharedPreferences shared_preferences;
SharedPreferences.Editor shared_preferences_editor;
String test_string = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
shared_preferences = getSharedPreferences("shared_preferences_test",
MODE_PRIVATE);
test_string = shared_preferences.getString("test_key", "Default");
Toast.makeText(getApplicationContext(), test_string, Toast.LENGTH_SHORT)
.show();
shared_preferences_editor = shared_preferences.edit();
shared_preferences_editor.putString("test_key", "Hello World");
shared_preferences_editor.commit();
test_string=shared_preferences.getString("test_key", "Default");
Toast.makeText(getApplicationContext(), test_string, Toast.LENGTH_SHORT).show();
}
}
Вот полное объяснение: http://www.codestacks.in/sharedpreferences/
Ответ 6
Я сталкивался с подобными проблемами в прошлом и поэтому написал эту библиотеку, чтобы упростить использование Android SharedPreferences
.
Android-SharedPreferences-Helper на GitHub - Следуйте этой ссылке, чтобы получить подробное описание и инструкции по использованию/настройке.
Упрощает использование стандартного Android SharedPreferences Class. разработчик может сделать несколько строк кода, которые в противном случае имели бы требуется несколько. Простота понимания по сравнению с дефолтом класс и прост в использовании.