startActivityForResult在startActivity工作时崩溃



我正在启动一个活动:

Intent intent = new Intent(this, CreateItemDetailsActivity.class);
if(storeId != null) {
intent.putExtra(Identifiers.STORE_ID, storeId);
}
intent.putExtra(Identifiers.ITEM_NAME, name);
intent.putExtra(Identifiers.ITEM_DESCRIPTION, description);
startActivity(intent);

这是可行的,但现在我需要将数据返回到原始活动,所以我将startActivity调用更改为:

startActivityForResult(intent, CREATE_ITEM_RESULT);

(CREATE_ITEM_RESULT只是我编的一个随机整数63463657(

然而,我的应用程序在没有调用两个onCreate方法(我已经在这两个方法中实现并放置了断点(的情况下崩溃:

Uncaught exception in thread main: java.lang.IllegalStateException: Could not execute method for android:onClick
android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:389)

(该代码在按钮点击处理程序中调用,因此为onClick(

我见过应用程序在调用startActivityForResult时崩溃,这也有同样的问题,但公认的答案建议删除一行recipe.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);,而我没有。

为什么我在startActivityForResult上崩溃,而startActivity工作得很好?

(我的最低SDK级别是16,目标和编译SDK级别是27,我正在运行Android 8.1模拟器(

如果没有看到任何关于这个问题的文档,但尝试使用四位数的int值应该可以消除错误。

我已经阅读了startActivityForResult的谷歌文档,没有发现任何关于最大int大小的参考。甚至代码文档也指出:

@param requestCode如果>=0,此代码将在onActivityResult((当活动存在时

因此,没有提及最大int值。古怪的


编辑

感谢@MidasLefko找到此信息:

RequestCodes的最大值只能是0xffff(65535(。所以你可能调用startActivityForResult(intent,REQUEST_CODE(;和REQUEST_CODE大于65535。

在此网站上:

https://code-examples.net/en/q/db5947

在startActivityForResult的不支持的Activity类实现中,requestCode的最大int没有限制,只要它是正数。然而,FragmentActivity(以及扩展的AppCompatActivity(覆盖了这种行为(文档(:

void startActivityForResult(Intent Intent,int requestCode(

修改标准行为以允许将结果传递到片段。这施加了一个限制requestCode为<=0xffff。

在FragmentActivity的源代码中,可以找到以下有用的注释:

下一个候选请求索引的提示。请求标记为int介于0和2^16-1之间,编码到Fragment.startActivityForResult(…(调用的requestCode。这允许我们将onActivityResult(…(发送到适当的碎片请求标记由allocateRequestIndex(…(分配。

int在java中是32位的,FragmentActivity使用16来确定将结果发送到哪个片段,其他16个片段可供开发人员使用。

相关内容

  • 没有找到相关文章

最新更新