我正在尝试将用户登录凭据保存在一个屏幕(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,而不是用户凭据
答案 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");
希望它有所帮助。