在Android中正确检查用户是否已登录。

huangapple 未分类评论52阅读模式
英文:

Correctly check if user is logged in. Android

问题

在我的MainActivity.java中,我使用Retrofit从服务器进行身份验证,并且使用令牌API进行身份验证:

  1. apiInterface = ApiClient.getClient().create(ApiInterface.class);
  2. User user = SharedPreferencesHelper.getUser(MainActivity.this);
  3. if (user.getToken() == null) {
  4. Intent login = new Intent(MainActivity.this, LoginActivity.class);
  5. startActivity(login);
  6. } else {
  7. setContentView(R.layout.activity_main);
  8. buildMain();
  9. }

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

英文:

I have my login setup like this, I use retrofit to authenticate from the server and I'm using a token api authentication:

In the MainActivity.java method onCreate

  1. apiInterface = ApiClient.getClient().create(ApiInterface.class);
  2. User user = SharedPreferencesHelper.getUser(MainActivity.this);
  3. if (user.getToken() == null) {
  4. Intent login = new Intent(MainActivity.this, LoginActivity.class);
  5. startActivity(login);
  6. } else {
  7. setContentView(R.layout.activity_main);
  8. buildMain();
  9. }

In the LoginActivity.java method on create (I'll summarize, the code is quite long)

  1. loginbtn.setOnClickListener(new View.OnClickListener() {
  2. @Override
  3. public void onClick(View v) {
  4. //get login ingo
  5. Login login = new Login(scardI, passwordI, device_name);
  6. Call<User> call = apiInterface.LoginUser(login);
  7. call.enqueue(new Callback<User>() {
  8. @Override
  9. public void onResponse(Call<User> call, Response<User> response) {
  10. if (response.isSuccessful()) {
  11. User user = response.body();
  12. //save user info into SharedPreferences
  13. SharedPreferencesHelper.setUser(LoginActivity.this, user);
  14. //check if user saved correctly by getting the user token
  15. if (SharedPreferencesHelper.getUserToken(LoginActivity.this) != null) {
  16. finish();
  17. }
  18. } else {
  19. //show error message
  20. }
  21. }
  22. @Override
  23. public void onFailure(Call<User> call, Throwable t) {
  24. //show error message
  25. }
  26. });
  27. }
  28. });

I'm having an issue, after the user logs in a blank page is displayed instead of the activity_main.xml however when I close the app and reopen it it takes me straight to the activity_main.xml as expected. Is there a reason that after the login it doesn't take me to the activity_main like expected.

答案1

得分: 1

  1. 如果响应成功缺少跳转至 MainActivity.java 的意图由于调用了 finish() 方法所以显示为空白屏幕
  2. if (response.isSuccessful()) {
  3. User user = response.body();
  4. SharedPreferencesHelper.setUser(LoginActivity.this, user);
  5. if (SharedPreferencesHelper.getUserToken(LoginActivity.this) != null) {
  6. Intent i = new Intent(this, MainActivity.class);
  7. i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
  8. startActivity(i);
  9. }
  10. }
英文:

An intent to MainActivity.java is missing on success. A blank screen is displayed because finish() is called.

  1. if (response.isSuccessful()) {
  2. User user = response.body();
  3. SharedPreferencesHelper.setUser(LoginActivity.this, user);
  4. if (SharedPreferencesHelper.getUserToken(LoginActivity.this) != null){
  5. Intent i = new Intent(this, MainActivity.class);
  6. i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK)
  7. startActivity(i);
  8. }
  9. }

huangapple
  • 本文由 发表于 2020年4月6日 23:02:16
  • 转载请务必保留本文链接:https://java.coder-hub.com/61062756.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定