Общие настройки Android - программирование
Подтвердить что ты не робот

Общие настройки 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);
4b9b3361

Ответ 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. разработчик может сделать несколько строк кода, которые в противном случае имели бы требуется несколько. Простота понимания по сравнению с дефолтом класс и прост в использовании.