Вопрос

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

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

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

Вот моя мрадиционность:

@Override
    protected void onResume(){
        super.onResume();

        isLoggedIn = prefs.getBoolean("isLoggedIn", false);

        if(!isLoggedIn){
            showLoginActivity();
        }
    }

Вот мое loginactive:

@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 () вызывается перед нанесением нанесенияResult (), поэтому, когда пользователь успешно вошел в систему, мое основное действие не получает уведомления, потому что onResume () повторно называется.

Где лучшее место для подсказки для входа в систему?

Это было полезно?

Решение

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

Редактировать

Документы сказать:

Вы получите этот звонок непосредственно перед OnResume (), когда ваша активность будет запускаться.

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top