我遇到了一个问题...所以我构建了应用程序,登录后在MainActivity中显示用户信息(我用Intent做了)。然后我启动应用程序,我必须使用PIN码登录。第一次一切都很好。但是,如果我单击mainActivity中的Logout按钮,我会回到LoginActivity,如果我再次尝试登录,我将不再获取用户信息。只有sessionManager中的空值。我希望你理解我的问题。我认为问题在于:
/** **SessionManager.java**
* Get stored session data
* */
public HashMap<String, String> getUserDetails(){
HashMap<String, String> user = new HashMap<String, String>();
// user userName
user.put(KEY_USER_NAME, pref.getString(KEY_USER_NAME, null));
// user workerGid
user.put(KEY_WORKER_GID, pref.getString(KEY_WORKER_GID, null));
// user firstName
user.put(KEY_FIRST_NAME, pref.getString(KEY_FIRST_NAME, null));
// user lastName
user.put(KEY_LAST_NAME, pref.getString(KEY_LAST_NAME, null));
// user mechGid
user.put(KEY_MECH_GID, pref.getString(KEY_MECH_GID, null));
// user transportName
user.put(KEY_TRANSPORT_NAME, pref.getString(KEY_TRANSPORT_NAME, null));
// return user
return user;
}
//Clear session details
public void logoutUser(){
// Clearing all data from Shared Preferences
editor.clear();
editor.commit();
}
//MapActivity: // get user data from session
HashMap<String, String> user = session.getUserDetails();
// First Name
String firsName = user.get(SessionManager.KEY_FIRST_NAME);
// Last Name
String lastName = user.get(SessionManager.KEY_LAST_NAME);
// Transport Name
String transportName = user.get(SessionManager.KEY_TRANSPORT_NAME);
TextView transport_name = (TextView) findViewById(R.id.transport);
transport_name.setText(transportName);
TextView nameLastname = (TextView) findViewById(R.id.user);
nameLastname.setText(firsName + lastName);
View logoutButton = findViewById(R.id.btnLogout);
View.OnClickListener button_logout = new View.OnClickListener() {
@Override
public void onClick(View v) {
if(session.isLoggedIn())
session.logoutUser();
Intent in = new Intent(MapActivity.this,LoginActivity.class);
startActivity(in);
finish();
}
};
logoutButton.setOnClickListener(button_logout)
答案 0 :(得分:0)
正如@Suranhi Singh上面的评论所述,您正在清除您的偏好,在这种情况下是您的用户会话。当您再次打开应用程序时,它会创建一个新的,空的SessionManager实例,它会覆盖之前的实例。
我建议使用不同的标记来保存您希望与SessionManager分开存留的信息。不要将SessionManager用于要保存的数据。