Вызывается ли 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 () вызывается первым.

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

3 70

3 ответа:

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

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

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

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