1. ホーム
  2. android

[解決済み] onResume()はonActivityResult()の前に呼び出されるのですか?

2023-06-09 23:42:29

質問

私のアプリはこのようなレイアウトになっています。

  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()が最初に呼ばれるため、私のメインアクティビティに通知が来ないことです。

ログインを促すのに最適な場所はどこですか?

どのように解決するのですか?

onActivityResultの呼び出しは、実はonResumeの前に起こります( のドキュメントを参照してください。 ). あなたが実際に startActivityForResult で起動し、起動されたアクティビティの結果を RESULT_OK に設定してから、アクティビティに値を返すのですか?を置くだけにしてみてください。 Log ステートメントを onActivityResult でその値を記録し、それがヒットすることを確認します。また、このとき isLoggedIn の値はどこに設定されていますか?それは、次のように設定する必要があるように思われます。 true に設定する必要があるように思えますが、明らかにそうなっていません。

Edit

ドキュメント は言う。

アクティビティが再スタートするとき、onResume()の直前にこの呼び出しを受けることになります。