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类的使用。 开发人员可以在几行代码中完成,否则这将需要几个代码。 与默认的类相比,易于理解,易于使用。
- Android Google地图:禁止在MapFragment中拖动
- Robolectric说:“找不到AndroidManifest.xml”
- 如何从最近的应用列表中删除应用程序?
- 使用“flatDirs”将本地.aar文件添加到Gradle构build不起作用
- 在ProjectScopeServices中没有可用的Factorytypes的服务
- 如何在Android App中实现Rate Itfunction
- ActionBarActivity无法parsing符号
- IOException:读取失败,套接字可能closures – Android 4.3上的蓝牙
- Android:如何获取当前主题的资源ID?