Вызывается onResume () перед onActivityResult ()?

Вот как мое приложение выложено:

  1. Пользователю onResume () предлагается ввести логин
  2. Если пользователь входит в систему, он может продолжать использовать приложение 3. Если пользователь выйдет из системы в любое время, я хочу снова запросить логин

Как я могу это достичь?

Вот моя MainActivity:

@Override protected void onResume(){ super.onResume(); isLoggedIn = prefs.getBoolean("isLoggedIn", false); if(!isLoggedIn){ showLoginActivity(); } } 

Вот моя LoginActivity:

 @Override protected void onPostExecute(JSONObject json) { String authorized = "200"; String unauthorized = "401"; String notfound = "404"; String status = new String(); try { // Get the messages array JSONObject response = json.getJSONObject("response"); status = response.getString("status"); if(status.equals(authorized)){ Toast.makeText(getApplicationContext(), "You have been logged into the app!",Toast.LENGTH_SHORT).show(); prefs.edit().putBoolean("isLoggedIn",true); setResult(RESULT_OK, getIntent()); finish(); } else if (status.equals(unauthorized)){ Toast.makeText(getApplicationContext(), "The username and password you provided are incorrect!",Toast.LENGTH_SHORT).show(); prefs.edit().putBoolean("isLoggedIn",true); } else if(status.equals(notfound)){ Toast.makeText(getApplicationContext(), "Not found",Toast.LENGTH_SHORT).show(); prefs.edit().putBoolean("isLoggedIn",true); } } catch (JSONException e) { System.out.println(e); } catch (NullPointerException e) { System.out.println(e); } } } 

После успешного входа пользователя в систему:

 protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { Toast.makeText(getApplicationContext(), "BOOM SHAKA LAKA!",Toast.LENGTH_SHORT).show(); } } 

Проблема заключается в том, что onResume () вызывается до onActivityResult (), поэтому, когда пользователь успешно выполнил вход в систему, моя основная активность не получает уведомления, потому что onResume () сначала вызывается.

Где лучше всего запрашивать логин?

Solutions Collecting From Web of "Вызывается onResume () перед onActivityResult ()?"

Вызов onActivityResult происходит до onResume, фактически (см. Документы ). Вы уверены, что на самом деле вы начинаете свою деятельность с помощью startActivityForResult и устанавливаете результат вызванной активности RESULT_OK прежде чем возвращать значение своей активности? Попробуйте просто поместить оператор Log в свой onActivityResult для регистрации этого значения и убедитесь, что он попал. Кроме того, где вы устанавливаете значение предпочтения isLoggedIn ? Похоже, вы должны установить это значение true в своей активности входа, прежде чем он вернется в любом случае, но это явно не происходит.

С фрагментами это не так просто, как onActivityResult() вызывается перед вызовом onResume() . Если активность, в которую вы возвращались, была временно getActivity() , вы обнаружите, что вызовы (например) getActivity() из onActivityResult() возвращают значение null. Однако, если активность не была getActivity() , вызов getActivity() вернет содержащуюся активность.

Эта несогласованность может быть источником трудно диагностируемых дефектов, но вы можете проверить поведение своего приложения, включив опцию разработчика «Не выполнять действия». Я склонен держать это включенным – я предпочел бы увидеть NullPointerException в разработке, чем в производстве.

Вы можете рассмотреть возможность абстрагирования состояния входа из активности. Например, если пользователь может отправлять комментарии, пусть действие onPost ping для входа в систему и переход оттуда, а не из состояния активности.