Android应用中的登录和注销问题

问题描述 投票:0回答:1

我遇到了一个问题...所以我构建应用程序,登录后在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)
android login logout
1个回答
0
投票

正如@Suranhi Singh上面的评论所述,您正在清除您的偏好,在这种情况下是您的用户会话。当您再次打开应用程序时,它会创建一个新的,空的SessionManager实例,它会覆盖之前的实例。

我建议使用不同的标记来保存您希望与SessionManager分开存留的信息。不要将SessionManager用于要保存的数据。

© www.soinside.com 2019 - 2024. All rights reserved.