使用共享首选项的登录对话框
我想使用共享首选项创建userlogin详细信息。使用共享首选项的登录对话框
当我加载应用程序,并点击登录按钮, 会弹出一个登录对话框。 我输入后,它会向用户敬酒,例如welcome [用户名]。 当用户再次登录时,它会将一条消息欢迎回来[用户名]。用户不必再次输入他/她的名字进入应用程序。 事实上,当用户点击登录时,它会敬酒回来[用户名],他/她可以继续申请。
但是,我的代码中有 ,只要我选择登录,我必须输入用户名。 即使我再次登录,我仍然需要输入用户名。
有人可以引导我与我的代码?
的logcat:
01-27 18:04:00.266: E/AndroidRuntime(4287): FATAL EXCEPTION: main
01-27 18:04:00.266: E/AndroidRuntime(4287): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.fuellogproject/com.example.fuellogproject.homeActivity}: java.lang.NullPointerException
01-27 18:04:00.266: E/AndroidRuntime(4287): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2034)
01-27 18:04:00.266: E/AndroidRuntime(4287): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
01-27 18:04:00.266: E/AndroidRuntime(4287): at android.app.ActivityThread.access$700(ActivityThread.java:140)
01-27 18:04:00.266: E/AndroidRuntime(4287): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237)
01-27 18:04:00.266: E/AndroidRuntime(4287): at android.os.Handler.dispatchMessage(Handler.java:99)
01-27 18:04:00.266: E/AndroidRuntime(4287): at android.os.Looper.loop(Looper.java:137)
01-27 18:04:00.266: E/AndroidRuntime(4287): at android.app.ActivityThread.main(ActivityThread.java:4921)
01-27 18:04:00.266: E/AndroidRuntime(4287): at java.lang.reflect.Method.invokeNative(Native Method)
01-27 18:04:00.266: E/AndroidRuntime(4287): at java.lang.reflect.Method.invoke(Method.java:511)
01-27 18:04:00.266: E/AndroidRuntime(4287): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
01-27 18:04:00.266: E/AndroidRuntime(4287): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
01-27 18:04:00.266: E/AndroidRuntime(4287): at dalvik.system.NativeStart.main(Native Method)
01-27 18:04:00.266: E/AndroidRuntime(4287): Caused by: java.lang.NullPointerException
01-27 18:04:00.266: E/AndroidRuntime(4287): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:160)
01-27 18:04:00.266: E/AndroidRuntime(4287): at android.preference.PreferenceManager.getDefaultSharedPreferences(PreferenceManager.java:366)
01-27 18:04:00.266: E/AndroidRuntime(4287): at com.example.fuellogproject.homeActivity.<init>(homeActivity.java:19)
01-27 18:04:00.266: E/AndroidRuntime(4287): at java.lang.Class.newInstanceImpl(Native Method)
01-27 18:04:00.266: E/AndroidRuntime(4287): at java.lang.Class.newInstance(Class.java:1319)
01-27 18:04:00.266: E/AndroidRuntime(4287): at android.app.Instrumentation.newActivity(Instrumentation.java:1068)
01-27 18:04:00.266: E/AndroidRuntime(4287): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2025)
01-27 18:04:00.266: E/AndroidRuntime(4287): ... 11 more
这是我的代码
public void CheckUser(View v) {
final Dialog dialog = new Dialog(homeActivity.this);
dialog.setContentView(R.layout.login);
dialog.setTitle("Login");
final EditText editTextUserName = (EditText) dialog
.findViewById(R.id.nameEditText);
Button btnLogIn = (Button) dialog.findViewById(R.id.loginBTN);
// get The User name and Password
String userName = editTextUserName.getText().toString();
if (access_token != null) {
SharedPreferences.Editor editor = prefs.edit();
editor.putString("username", userName);
editor.commit();
String getUser = prefs.getString("username", userName);
Toast.makeText(homeActivity.this, "Welcome," + getUser,
Toast.LENGTH_LONG).show();
dialog.dismiss();
Intent mainact = new Intent(getApplicationContext(),
MainActivity.class);
startActivity(mainact);
} else {
Toast.makeText(homeActivity.this, "Welcome back," + userName,
Toast.LENGTH_LONG).show();
Intent mainact = new Intent(getApplicationContext(),
MainActivity.class);
startActivity(mainact);
}
// get the Refferences of views
// Set On ClickListener
btnLogIn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
SharedPreferences.Editor editor = prefs.edit();
editor.putString("access_token", "<save value>");
editor.commit();
}
});
dialog.show();
}
试试这个现在
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
String access_token = preferences.getString("username", null);
if(access_token!=null){
showMain(); //inside show main you write your logic for toast, redirect to the desired view
}
如果用户名存在于共享偏好,那么它会去到你的设计其他红色活动,您还可以显示LoginActivity,并把下面的代码在你的登录按钮的点击收听
SharedPreferences.Editor editor = preferences.edit();
editor.putString("access_token","<save value>");
editor.commit();
我编辑过了,你是这个意思? 有人说SharedPrefrences必须是最后的 – Chloe
@chloe,声明'SharedPreference作为私人变量外的onCreateView(..)'并初始化它的方法,然后我不会要求'最后' – NarendraSoni
我刚刚编辑我的问题/我有一个强制关闭错误 – Chloe
看来你阅读和共享偏好写入/时有不同的密钥:
editor.putString("user_name", userName);
和
String getUser = prefs.getString("username", userName);
在特别
,钥匙User_name
和userename
。
1. Use the same string to save and retrieve values...
"editor.putString("user_name", userName);
editor.commit();
String getUser = prefs.getString("username".."
"user_name" while putString and "username" while getString
2. Where are you retrieving the sharedPref value? it has to be without checking the edittext value if you want the user to log in without typing his/her name.
i.e. String getUser = prefs.getString("username", userName); -with a null check when user clicks login
什么是引发NPE的homeActivity.java:19'? –