我正在启动一个活动:
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个片段可供开发人员使用。