我必须使用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);
答案 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 Guide的this 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();
}
}
答案 5 :(得分:0)
我过去遇到过类似的问题,因此编写了这个库来简化Android SharedPreferences
的使用。
Android-SharedPreferences-Helper on GitHub - 请点击此链接获取详细说明和使用/设置说明。
简化默认Android SharedPreferences类的使用。该 开发人员可以用几行代码来完成 需要几个。与默认相比,易于理解 类和易于使用。