簡體   English   中英

在`finish()`之后沒有調用onActivityResult - 調用被調用的活動

[英]onActivityResult not being called after `finish()`-ing the called activity

我知道,我知道......這個問題已經解決了。 這些解決方案都不適合我/適用於我。

這是我嘗試做的方法。

LoginActivity (呼叫Activity ):

    private void loginSuccessful(LoggedInUserView model) {
        String welcome = String.format(getString(R.string.welcome), model.getDisplayName());
        Toast.makeText(getApplicationContext(), welcome, Toast.LENGTH_LONG).show();
        Intent intent = new Intent(this, PinCodeActivity.class);
        if (!model.isNewUser()) {
            intent.putExtra("prompt", "Enter your pin");
            startActivityForResult(intent, 102);
        } else {
            intent.putExtra("prompt", "Enter a pin");
            startActivityForResult(intent, 103);
        }
    }

然后在PinCodeActivity (稱為Activity

    private void handlePinEntered() {
        Intent intent = new Intent();
        intent.putExtra("hash", pin.getValue());
        setResult(Activity.RESULT_OK, intent);
        System.out.println("==================================="); // Is printed
        finish();
    }

然后LoginActivity.onActivityResult()編輯:idk 如果重要,但在我的情況下,首先還是最后調用super.onActivityResult()並不重要。 它們都導致相同的結果。

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        System.out.println(requestCode); // Is NOT printed
        if (resultCode == Activity.RESULT_OK)
            switch (requestCode) {
                case 101:
                    try {
                        // The Task returned from this call is always completed, no need to attach
                        // a listener.
                        Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
                        GoogleSignInAccount account = task.getResult(ApiException.class);
                        loginViewModel.login(account);
                    } catch (ApiException e) {
                        // The ApiException status code indicates the detailed failure reason.
                        Log.w(TAG, "signInResult:failed code=" + e.getStatusCode());
                    }
                    break;
                case 102:
                    System.out.println(data.getStringExtra("hash"));
                    break;
                case 103:
                    System.out.println(data.getStringExtra("hash"));
                    break;
            }
        super.onActivityResult(requestCode, resultCode, data);
    }

這就是LoginActivity的定義方式

public class LoginActivity extends AppCompatActivity {

    private static final String TAG = "LOGIN";

    @Inject
    DaggerViewModelFactory viewModelFactory;
    @Inject
    AppProperties appProperties;
    private LoginViewModel loginViewModel;

    private ProgressBar loadingProgressBar;

    private EditText usernameEditText;
    private EditText passwordEditText;

    private Button loginButton;
    private SignInButton googleLoginButton;
    private GoogleSignInClient googleSignInClient;
// more code...
}

最后是如何定義PinCodeActivity

public class PinCodeActivity extends AppCompatActivity implements View.OnClickListener {
    private List<RadioButton> unchecked;
    private List<RadioButton> checked = new LinkedList<>();
    private PinCode pin = new PinCode();
// more code...
}

這是日志貓

2019-11-09 19:26:08.000 2462-2535/com.example.finance D/EGL_emulation: eglMakeCurrent: 0x7fb761429ae0: ver 3 0 (tinfo 0x7fb761418f40)
2019-11-09 19:26:08.009 2462-2535/com.example.finance D/EGL_emulation: eglMakeCurrent: 0x7fb761429ae0: ver 3 0 (tinfo 0x7fb761418f40)
2019-11-09 19:26:10.506 2462-2462/com.example.finance I/System.out: ===================================
2019-11-09 19:26:11.069 2462-2535/com.example.finance D/EGL_emulation: eglMakeCurrent: 0x7fb761429ae0: ver 3 0 (tinfo 0x7fb761418f40)

請注意所有===的行,它在finish()之前和setResult()之后打印,這意味着它能夠設置結果。 此外,我看不到這些日志的錯誤/崩潰跡象。

我的問題是正如標題所說,onActivityResult() 不是從我以 startActivityForResult() 開始的活動中調用的

也許這只是你表達的方式,但你的代碼沒有澄清,所以讓我們說清楚。 onActivityResult()不應被稱為“來自 [您] 開始的活動”。 onActivityResult在您最初調用startActivityForResult的活動中被調用

所以你的onActivityResult應該在LogInActivity不是PinCodeActivity中聲明。

希望有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM