首页 > 解决方案 > 正确检查用户是否登录。 Android

问题描述

我有这样的登录设置,我使用改造从服务器进行身份验证,并且我正在使用令牌 api 身份验证:

在 MainActivity.java 方法 onCreate

apiInterface = ApiClient.getClient().create(ApiInterface.class);

User user = SharedPreferencesHelper.getUser(MainActivity.this);

if (user.getToken() == null) {
    Intent login = new Intent(MainActivity.this, LoginActivity.class);
    startActivity(login);
} else {
    setContentView(R.layout.activity_main);
    buildMain();
}

在LoginActivity.java方法上create(我总结一下,代码挺长的)

loginbtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //get login ingo

        Login login = new Login(scardI, passwordI, device_name);

        Call<User> call = apiInterface.LoginUser(login);

        call.enqueue(new Callback<User>() {
            @Override
            public void onResponse(Call<User> call, Response<User> response) {
                if (response.isSuccessful()) {
                    User user = response.body();
                    //save user info into SharedPreferences
                    SharedPreferencesHelper.setUser(LoginActivity.this, user);

                    //check if user saved correctly by getting the user token
                    if (SharedPreferencesHelper.getUserToken(LoginActivity.this) != null) {
                        finish();
                    }
                } else {
                    //show error message
                }
            }
            @Override
            public void onFailure(Call<User> call, Throwable t) {
                //show error message
            }
        });
    }
});

我遇到了一个问题,在用户登录后会显示一个空白页面,而不是显示,activity_main.xml但是当我关闭应用程序并重新打开它时,它会将我直接带到activity_main.xml预期的状态。是否有原因导致登录后它没有像预期的那样将我带到activity_main。

标签: javaandroid

解决方案


成功时缺少 MainActivity.java 的意图。因为调用了finish(),所以会显示一个空白屏幕。

 if (response.isSuccessful()) {
     User user = response.body();
     SharedPreferencesHelper.setUser(LoginActivity.this, user);
      if (SharedPreferencesHelper.getUserToken(LoginActivity.this) != null){
       Intent i = new Intent(this, MainActivity.class);
       i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK)
       startActivity(i);
}

} 


推荐阅读