我正在开发一个简单的Android应用程序。
该应用程序具有与php连接的用户登录功能。
我成功地完成了登录功能。我现在想要的是save the username
,以便我可以use it anywhere and anytime in my application
。经过一些SO线程后,我发现使用android sharedPreferences这是可行的。
但在实施它们之前,我想知道在使用sharedPreferences
时应该记住的一些内容
答案 0 :(得分:2)
基本任务:
持久存储。
记住:
使用数据库或平面文件存储可能会有更多数据吗?
保存并阅读“用户名”的正确方法:
String key = "username";
String value = "John Doe";
// Save
SharedPreferences.Editor editor = context.getSharedPreferences(MY_PREFS_NAME, Context.MODE_PRIVATE).edit();
editor.putString(key, value);
editor.commit();
// Read
String def = "";
SharedPreferences settings = context.getSharedPreferences(MY_PREFS_NAME, Context.MODE_PRIVATE);
if(!settings.contains(key)) {
// Warn user that there is nothing to read and/or return a default value: "def"
}
String value = settings.getString(key, def);
答案 1 :(得分:2)
当您需要应用程序存储持久数据时,基本上使用共享偏好的基本任务是什么?
SharedPreferences。我认为当数据库是(用于存储大小/数据的纯粹目的)并不是真正需要时使用它。
实际使用时要记住哪些事项?
您可以保存几乎您应用程序执行任务时通常需要的任何内容。例如,在游戏应用程序中,您可以存储用户的分数。但是,由于rooted设备上的任何人都可以访问SharedPreferences
个文件,因此您不希望存储密码。无论如何绝对必须存储它们,您应该实现自己的算法来加密它。在我的应用程序中,我将URL存储在Facebook和Twitter上的用户个人资料图片中。这已经属于公共领域。
在代码中以编程方式实现它们的正确方法是什么?
如果您打算使用SharedPreference
,只需要一两个活动,就可以使用类似的方法将值添加到SharedPreference文件中:
// THE SHAREDPREFERENCE INSTANCE
SharedPreferences sharedPrefs;
// THE EDITOR INSTANCE
Editor editor;
// A CONSTANT STRING TO PROVIDE A NAME TO THE SHAREDPREFERENCE FILE
private static final String PRIVATE_PREF = "some_file_name";
// INSTANTIATE THE SHAREDPREFERENCE INSTANCE
sharedPrefs = getApplicationContext().getSharedPreferences(PRIVATE_PREF, Context.MODE_PRIVATE);
// INSTANTIATE THE EDITOR INSTANCE
editor = sharedPrefs.edit();
// ADD VALUES TO THE PREFERENCES FILE
editor.putLong(UNIQUE_KEY_NAME, VALUE);
editor.putString(UNIQUE_KEY_NAME, VALUE);
editor.putString(UNIQUE_KEY_NAME, VALUE);
editor.putString(UNIQUE_KEY_NAME, VALUE);
// THIS STEP IS VERY IMPORTANT. THIS ENSURES THAT THE VALUES ADDED TO THE FILE WILL ACTUALLY PERSIST
// COMMIT THE ABOVE DATA TO THE PREFERENCE FILE
editor.commit();
要从文件中提取值:
String someString = sharedPrefs.getString(UNIQUE_KEY_NAME, null);
long someLong = sharedPrefs.getLong(UNIQUE_KEY_NAME, 0);
如果您需要重用SharedPreference
文件中的内容/值,这里有一个很好的教程,可以创建一个帮助类,让任意数量的Activites
访问值而不是编码以上每一个:http://megasnippets.com/source-codes/java/sharedpreferences_helper_class_android
最后如何在使用后将其删除?
// INSTANTIATE THE EDITOR INSTANCE
editor = sharedPrefs.edit();
// TO CLEAR A SELECT FEW OF THE VALUES:
editor.remove(KEY_FOR_THE_VALUE_TO_BE_REMOVED);
// ALTERNATIVELY, TO CLEAR ALL VALUES IN THE FILE:
editor.clear();
注意:当用户从设备的设置中手动清除应用数据时,您可能会删除任何SharedPreferences
个文件。
进一步阅读的链接:
答案 2 :(得分:1)
关于基本任务:您可以阅读Storage Options at developer.android.com。
关于记住:尽量避免在共享偏好设置中将感知数据保存到应用程序,因为用户可以轻松访问数据。
您可以在 /data/data/your_application.package.name/shared_prefs/shared_prefs_name.xml 中找到共享首选项xml文件。
实施:
Usualy我正在使用这样的静态方法创建类:
public class MySharedPreferences {
private static final String APP_SHARED_PREFS = "my_prefs";
private static final String KEY_LOGIN = "username";
public static void setUsername(Context context, String username) {
SharedPreferences sharedPreferences = context.getSharedPreferences(APP_SHARED_PREFS, Activity.MODE_PRIVATE);
Editor editor = sharedPreferences.edit();
editor.putString(KEY_USERNAME, login);
editor.commit();
}
public static String getUsername(Context context) {
SharedPreferences sharedPreferences = context.getSharedPreferences(APP_SHARED_PREFS, Activity.MODE_PRIVATE);
return sharedPreferences.getString(KEY_USERNAME, null);
}
}