gpt4 book ai didi

android - 每次 onActivityResult 在多链 Activity 中返回数据为 null

转载 作者:搜寻专家 更新时间:2023-11-01 09:33:11 24 4
gpt4 key购买 nike

首先,相关问题的每一个答案都没有解决我的问题,这就是为什么我创建一个新问题。

我有两个应用程序。从第一个应用程序开始,我使用带有 onActivityResult 的 URI 调用 ACTION_VIEW 的 Intent 。

在第二个应用中,我为同一个 URI 设置了一个 intent 过滤器。

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

在 Activity C 中,我使用 onActivityResult 调用 Activity D。

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

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

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 A:

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 启动 ActivityD,请求代码为 100。

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

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

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

从你的 ActivityB 启动 ActivityC 像这样。

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

然后从 ActivityC 像这样启动 ActivityD

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

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

希望这能解决您的问题。

关于android - 每次 onActivityResult 在多链 Activity 中返回数据为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45512669/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com