Android共享首选项

我必须使用android中的sharedpreferences类共享首选项,并且首选项必须在两个活动之间共享。 我应该如何将这些偏好从一项活动转移到另一项活动中? 可以使用静态variables,但它们不适合我。

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

您应该通过意向调用将它们传递给活动,或者您应该阅读新活动中需要的那些。

创build一个帮助程序类,处理所有活动的共享首选项调用。 然后在任何需要存储/获取首选项的活动上实例化它的一个实例。

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

曾经想过看看处理这个话题的Android开发者指南 ?

如果要共享活动之间的首选项(查看JavaDoc) ,请使用具有相同文件名的getSharedPreferences(String name,int mode)方法。

我认为关键是像这样让SharedPreference实例化

 SharedPreference preferences = PreferenceManager.getDefaultSharedPreferences(mContext); 

就我个人而言,我使用这个库来处理与sharedPreferences有关的所有困难工作,并使它在所有的活动中都可用。

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

如果只是两个活动,那么你可以使用Bundle来传递值。 对于两个以上的活动,build议您使用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/

过去我遇到过类似的问题,因此写了这个库来简化Android SharedPreferences的使用。

GitHub上的Android-SharedPreferences-Helper – 按照此链接获取详细描述和使用/设置说明。

简化默认Android SharedPreferences类的使用。 开发人员可以在几行代码中完成,否则这将需要几个代码。 与默认的类相比,易于理解,易于使用。