共享首选项登录活动

时间:2016-03-02 13:03:06

标签: android database login sharedpreferences android-sharedpreferences

我正在尝试将用户登录凭据保存在一个屏幕(login.java)中,并尝试在用户登录时获取该凭据,并尝试在另一个活动(loggedin.java)上获取它,但它没有发生。

login.java
 b1.setOnClickListener(new View.OnClickListener() {


        @Override
        public void onClick(View v) {

            {
                SharedPreferences pref = getApplicationContext().getSharedPreferences("Mypref", 0);
                SharedPreferences.Editor editor = pref.edit();

                {
                    editor.putString("email", e1.getText().toString());
                    editor.putString("password", e2.getText().toString());
                    editor.commit();
                    String email = pref.getString("email", null);
                    t.setText(email);
                    //Log.e("email",email);
                }
            }



loggedin.java
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.accinfo);
    t1 = (TextView) findViewById(R.id.textView3);
    t2 = (TextView) findViewById(R.id.textView4);
    SharedPreferences pref = getSharedPreferences("MYPref", 0);
    String email = pref.getString("email", null);
    String password = pref.getString("password", null);
    t1.setText(email);
    t2.setText(password);
}}

输出为NULL,而不是用户凭据

3 个答案:

答案 0 :(得分:2)

您应该记住您提供的名称,因为这是区分大小写的。

  

MYPref - Mypref

答案 1 :(得分:1)

调用SharedPreferences时有两个不同的名称,检查字符串并使用全局变量,这样就不会使输入失败:)

  

MYPref - Mypref

无论如何,如果你需要在整个应用程序中使用它们,你可以创建一个类(.java文件)并使用静态值,例如:

public class LoggedUser{
    public static String email;
    public static String password;

    //getters and setters

}

如果您在用户登录时为其分配值,您将在整个应用程序中填充它们,而不是每次都调用sharedPrefs

答案 2 :(得分:0)

一个简单而优雅的解决方案是在android中使用一个非常简单的库TinyDB,它只不过是对共享首选项的抽象。

您可以在活动的onCreate()方法中对其进行初始化,如下所示:

TinyDB tinydb = new TinyDB(this);

然后像这样使用它:

tinydb.putString("userName", "john");
String currentUser = tinydb.getString("userName");

希望它有所帮助。