每次 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
的结果。
希望能解决您的问题。
首先,相关问题的每一个回答都没有解决我的问题,所以我创建了一个新问题。
我有两个应用程序。从第一个应用程序开始,我使用 onActivityResult
.
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
的结果。
希望能解决您的问题。