共享首选项登录活动
问题描述:
我试图将用户登录凭据保存在一个屏幕(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,而不是用户凭据
答
您应该记住您给出的名称,因为这是区分大小写的。
MYPref - Mypref
答
你有两个不同的名字,当你调用SharedPreferences,检查字符串,也许使用全局变量,所以你不能不输入: )
MYPref - Mypref
无论如何,如果你需要使用它们在你的应用程序,你可以创建一个类( java文件),并使用静态值,例如:
public class LoggedUser{
public static String email;
public static String password;
//getters and setters
}
如果您为它们分配一个值时,你就会有用户登录他们充满各地的应用程序,而不调用每次sharedPrefs
答
一简单而优雅的解决方案是在android中使用一个非常简单的库TinyDB,这只不过是对共享首选项的抽象。
您可以初始化它在你活动的onCreate()
方法是这样的:
TinyDB tinydb = new TinyDB(this);
,然后用它是这样的:
tinydb.putString("userName", "john");
String currentUser = tinydb.getString("userName");
希望它能帮助。
MYPref和MYpref P和的Y getSharedPref拼写错误 –
变 “MYPref” 到 “Myrpref” 变了,你needthe同名 – Fabich
题外话>简单的拼写错误。 – Shark