0

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

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

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

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

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

3 回答 3

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);
于 2013-04-15T08:08:01.537 回答
2

共享偏好的基本任务是什么?

当您需要应用程序存储持久数据时,本质上会使用SharedPreferences 。我考虑在不需要数据库时使用它(纯粹出于要存储的大小/数据的目的)。

实际使用时要记住什么?

您可以保存应用程序执行其任务通常需要的任何内容例如,在游戏应用程序中,您可以存储用户的分数。但是,由于rootSharedPreferences设备上的任何人都可以访问文件,因此您不希望存储密码。如果你绝对必须存储它们,你应该实现你自己的算法来加密它。在我的一个应用程序中,我将 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/
于 2013-04-15T09:02:09.400 回答
1

关于基本任务
您可以在 developer.android.com 上阅读存储选项

关于记住
尽量避免将敏感数据保存到共享首选项中的应用程序中,因为用户可以轻松访问数据。您可以在/data/data/your_application.package.name/shared_prefs/shared_prefs_name.xml
中找到您的共享首选项 xml 文件实现: 通常我使用这样的静态方法创建类:


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);
    }
}
于 2013-04-15T08:15:09.937 回答