繁体   English   中英

在 Android 中使用共享首选项

[英]Using Shared Preferences in Android

我有三个活动,A、B 和 C。其中 A 是启动活动,B 包含登录屏幕,其中包含用户 ID 和密码文本字段以及一个登录按钮。 当我单击登录时,它会将我带到欢迎屏幕,在屏幕 C 上显示用户名。

在这里,我想实现共享首选项,以便我可以存储用户的用户名和密码,这样用户就不必一次又一次地插入用户名和密码,并且在启动屏幕后用户直接进入欢迎屏幕。

我阅读了一些关于共享首选项的文档,我了解到共享首选项有两种类型,一种是活动级别,另一种是应用程序级别。

我该如何实施?

像这样从活动 A 中编写它:

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
            Editor editor = sp.edit();
            editor.putString("YOUR_KEY", "username");
            editor.commit();

你可以在之后阅读它:

SharedPreferences p = PreferenceManager.getDefaultSharedPreferences(this);
        String username = p.getString("YOUR_KEY", null);

这相对容易。 您可以将用户名和密码直接存储在 SharedPreference 中,如下所示:

SharedPreferences p = PreferenceManager.getDefaultSharedPreferences(context);

p.edit().putString("username", username).commit();
p.edit().putString("password", password).commit(); //SECURITY HAZARD: read below...

然后你可以像这样检索它:

String username = p.getString("username", "");
String password = p.getString("password", "");

这样做的问题是密码在全球范围内可用。 您需要有一种方法来防止其他人查看它。 这样做的方法是在保存密码时加密密码,并在使用对称密钥加载密码时解密密码。 这是加密教程: http : //android.voxisland.com/code_examples/How_to_encrypt_and_decrypt_strings.rhtml

如果这对您有帮助,请告诉我。

伊曼纽尔

这是使用共享首选项的最佳方法,只需调用此方法

存储共享首选项

public static void setDefaults(String key, String value, Context context) {
    SharedPreferences prefs =
            PreferenceManager.getDefaultSharedPreferences(context);

    SharedPreferences.Editor editor = prefs.edit();

    editor.putString(key, value);

    editor.commit();
}

调用此方法并像这样传递参数

Classname.setsetDefaults("key","Value",context);

获得共享价值

    public static String getDefaults(String key, Context context) {
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
        return preferences.getString(key, null);
    }

调用这个方法并传递key

ClassName.getDefaults("Key",Context);

在android中使用共享首选项

public class SharedPref {

public static void setValue(String key, String value, Context context) {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putString(key, value);
    editor.commit();
}

public static String getValue(String key, Context context) {
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
    return preferences.getString(key, null);
}
 public static void setAlertDialog(Context mContext,String title,String message)
{
    AlertDialog alertDialog = new AlertDialog.Builder(mContext).create();
    alertDialog.setTitle(title);
    alertDialog.setMessage(message);
    alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                    dialog.dismiss();
                }
            });
    alertDialog.show();
}

}

并从类使用以下代码设置和获取值

SharedPref.setConfig("key","value",Context);
SharedPref.getConfig("key",Context);
SharedPref.setAlertDialog(Context,"title","Content to print");

存储用户名和密码是一种不好的做法,而不是使用 JWT。 从您的响应中获取 JWT 令牌,然后将其存储在您的共享首选项中。 如果您的 API 没有返回任何 JWT 回复,那么至少在保存之前散列您的用户名和密码,但这也是不安全的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM