每次 onActivityResult 在多链中返回数据为 null activity

Every time onActivityResult returning data as null in multi chain activity

首先,相关问题的每一个回答都没有解决我的问题,所以我创建了一个新问题。

我有两个应用程序。从第一个应用程序开始,我使用 onActivityResult.

的 URI 调用 ACTION_VIEW 的意图

在第二个应用程序中,我为相同的 URI 设置了一个 Intent 过滤器。

现在从 Activity B,我在 App2 中用 onActivityResult 调用 Activity C。

从Activity C,我用onActivityResult呼叫Activity D。

在 Activity 中进行一些工作后,D 将使用捆绑包中的一些数据设置结果并将结果设置为 OK。

我不是在 Activity C 中获取此数据,而是在 Activity B 中获取数据包中的空数据。

并且 Activity B 正在向 App1 的 Activity A 发送相同的响应。因此,我也在 App1 中获取了空数据。

请求中,

App1 (Activity A) ---> App2 (Activity B) ---> Activity C ---> Activity D

作为回应,

Expected : App1 (Activity A) <--- App2 (Activity B) <--- Activity C <--- Activity D

Actual : App1 (Activity A) <--- App2 (Activity B) <--- Activity D
with data as null.

请帮我从App2的Activity D获取数据到App1的Activity A。

代码:

App1 Activity答:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(deepLinkUrl));
Intent chooser = Intent.createChooser(intent, title);
if (intent.resolveActivity(getPackageManager()) != null) {
    startActivityForResult(chooser, 1);
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1) {
        if (data.getExtras() != null) {
            Log.e("onActivityResult", "responseIntent.getExtras() " + 
                     data.getExtras());
        }
    }
}

App2 Activity B:

Constants.deeplinkUri = getIntent().getData();
Intent intent = new Intent(SplashActivity.this, LoginActivity.class);
intent.setData(Uri.parse(Constants.deeplinkUri));
startActivityForResult(intent, 100);

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 100) {
        if (data.getExtras() != null) {
            Log.e("onActivityResult", "responseIntent.getExtras() " + 
                     data.getExtras());
        }
        setResult(Activity.RESULT_OK, data);
        finish();
    }
}

App2 Activity C:

Intent intent = new Intent(LoginActivity.this, PayActivity.class);
intent.setData(Uri.parse(Constants.deeplinkUri));
startActivityForResult(intent, 100);

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 100) {
        if (data.getExtras() != null) {
            Log.e("onActivityResult", "responseIntent.getExtras() " + 
                     data.getExtras());
        }
        setResult(Activity.RESULT_OK, data);
        finish();
    }
}

App2 Activity D:

Intent returnIntent = new Intent();
returnIntent.putExtra("result", msg);
setResult(Activity.RESULT_OK, returnIntent);
finish();

提前致谢。 有人吗?

您在调用 startActivityForResult 时遇到问题。

从您的 ActivityA 中,您正在像这样启动 ActivityB

startActivityForResult(chooser, 1); // The request code is 1

从您的 ActivityB 您正在启动 ActivityC

startActivityForResult(intent, 100); // Request code 100

ActivityC 开始,您使用相同的请求代码 100 启动 ActivityD

startActivityForResult(intent, 100);  // Same request code 100

因此,当您的 ActivityD 正在设置一些结果并将结果意图传递给调用 Activity 时,它会立即通过 super 调用将结果传递给其父对象。在您的情况下,它立即将结果传递给 ActivityB 并且 ActivityB 中有一个处理程序来处理请求代码 100 也获取空值。

所以您可以尝试在此处为每个 Activity 设置不同的请求代码以避免这种情况。

从您的 ActivityB 启动 ActivityC 像这样。

startActivityForResult(intent, 100);  // Request code 100

然后从 ActivityC 开始 ActivityD 像这样

startActivityForResult(intent, 101);  // Request code 101

现在在ActivityC中添加处理程序来处理ActivityC中请求代码为101的结果。

希望能解决您的问题。