Preferencias compartidas de Android

Tengo que compartir preferencias usando la clase de preferencias compartidas en Android y las preferencias deben compartirse entre dos actividades. ¿Cómo voy a pasar estas preferencias de una actividad a otra? Las variables estáticas se pueden usar pero no funcionan para mí.

//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); 

Debe pasarlos a la actividad a través de la llamada de intención o debe leer los que necesita en la nueva actividad.

Cree una clase auxiliar que maneje todas las llamadas de preferencias compartidas para todas sus actividades. A continuación, crea una instancia de ella en cualquier actividad que necesite almacenar / obtener una preferencia.

 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(); } } 

Entonces en tu actividad …

 public class MyActivity extends Activity { private AppPreferences _appPrefs; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); _appPrefs = new AppPreferences(getApplicationContext()); // ... } } 

y

 String someString = _appPrefs.getSmsBody(); 

o

 _appPrefs.saveSmsBody(someString); 

¿Alguna vez pensó en consultar la Guía del desarrollador de Android que maneja este tema ?

Use el método getSharedPreferences (String name, int mode) con el mismo nombre de archivo si desea compartir las preferencias entre sus Actividades (eche un vistazo a JavaDoc).

Creo que la clave es crear instancias de SharedPreference como este

 SharedPreference preferences = PreferenceManager.getDefaultSharedPreferences(mContext); 

Personalmente, utilizo esta Biblioteca , se encarga de todo el arduo trabajo relacionado con las Preferencias compartidas y la pone a disposición en todas las actividades.

https://github.com/deviant-studio/Gendalf Solo prueba esta biblioteca.

 // 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); 

Si solo son dos actividades, puede usar Bundle para pasar valores. Para más de dos actividades, se recomienda que use SharedPreferences.

Aquí hay un ejemplo de uso de Bundle para pasar valores:

  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); 

Para obtener los valores pasados:

  try{ Bundle get_bundle=getIntent().getExtras(); String get_string=get_bundle.getString("key_sample"); }catch(Exception e){ e.printStackTrace(); } 

Mira esto: http://www.codestacks.in/2013/03/bundle-values-activities/

Ejemplo de Preferencias Compartidas:

  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(); } } 

Aquí está la explicación completa: http://www.codestacks.in/sharedpreferences/

He enfrentado problemas similares en el pasado y, por lo tanto, he escrito esta biblioteca para simplificar el uso de Android SharedPreferences .

Android-SharedPreferences-Helper en GitHub : sigue este enlace para obtener una descripción detallada y las instrucciones de uso / configuración.

Simplifica el uso de la clase predeterminada de preferencias compartidas de Android. El desarrollador puede hacer en algunas líneas de código que de otro modo habría requerido varios. Fácil de entender en comparación con la clase predeterminada y fácil de usar.