使用共享首选项android时要记住哪些事项?

时间:2013-04-15 08:00:52

标签: android sharedpreferences

我正在开发一个简单的Android应用程序。

该应用程序具有与php连接的用户登录功能。

我成功地完成了登录功能。我现在想要的是save the username,以便我可以use it anywhere and anytime in my application。经过一些SO线程后,我发现使用android sharedPreferences这是可行的。

但在实施它们之前,我想知道在使用sharedPreferences时应该记住的一些内容

  • 共享偏好的基本任务是什么?
  • 在实际使用它们时要记住哪些事项?
  • 在代码中以编程方式实现它们的正确方法是什么?
  • 最后如何在使用后删除它们?

3 个答案:

答案 0 :(得分:2)

如何从SharedPreferences持久存储中保存/读取'用户名'

基本任务

持久存储。

记住

使用数据库或平面文件存储可能会有更多数据吗?

保存并阅读“用户名”的正确方法

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个文件。

进一步阅读的链接:

  1. http://www.vogella.com/articles/AndroidFileBasedPersistence/article.html
  2. http://saigeethamn.blogspot.in/2009/10/shared-preferences-android-developer.html
  3. http://www.mybringback.com/tutorial-series/12260/android-sharedpreferences-example/
  4. http://www.androidhive.info/2012/08/android-session-management-using-shared-preferences/

答案 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);
    }
}
相关问题