Android共享偏好设置

时间:2011-04-20 18:10:41

标签: android

我必须使用android中的sharedpreferences类来共享首选项,并且首选项必须在两个活动之间共享。如何将这些偏好从一个活动传递到另一个活动?可以使用静态变量,但它们对我不起作用。

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

6 个答案:

答案 0 :(得分:94)

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

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

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

答案 1 :(得分:3)

曾考虑过查看处理Android Developer Guidethis topic吗?

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

答案 2 :(得分:1)

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

SharedPreference preferences = PreferenceManager.getDefaultSharedPreferences(mContext);

就个人而言,我使用this Library来处理sharedPreferences所涉及的所有艰苦工作,并使其在所有活动中都可用。

答案 3 :(得分:1)

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

答案 4 :(得分:0)

如果它只是两个活动,那么您可以使用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/

答案 5 :(得分:0)

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

Android-SharedPreferences-Helper on GitHub - 请点击此链接获取详细说明和使用/设置说明。

  

简化默认Android SharedPreferences类的使用。该   开发人员可以用几行代码来完成   需要几个。与默认相比,易于理解   类和易于使用。

相关问题