java.lang.IllegalArgumentException:对于requestCode只能使用低16位

我正在编写一个应用程序,其中Activity A使用启动Activity B

 startActivityForResult(intent, -101); 

但是在调用时,它会回复以下错误日志:

 E/AndroidRuntime( 1708): java.lang.IllegalArgumentException: Can only use lower 16 bits for requestCode E/AndroidRuntime( 1708): at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:837) 

可能它可能是-101但我不确定。 有没有人对此有任何想法?

您需要将正数传递给startActivityForResult

您只在android.support.v4.app.FragmentActivity获得此exception,而不是在使用android.app.Activity

FragmentActivity startActivityForResult()要求requestCode为16位,表示范围为0到65535。

此外, FragmentActivity validateRequestPermissionsRequestCode要求requestCode为16位,这意味着范围为0到65535。

有关详细信息(如果要查看源代码): https : //stackoverflow.com/a/33331459/4747587

还可以提一下,如果使用大于2 ^ 16/2(即32768)的数字,可能会发生这种情况,因此基本上有2 ^ 15个选项可以不搞砸。

说明:16位可以代表65536个数字之一,但是,其中一半是负数。

您只能使用低16位的requestCode表示 – 二进制 – 您可以使用

0000000000000000 (16 bits) to 1111111111111111 (16 bits)

在十进制(“数字”)术语中,这允许2^16 = 65536组合。 因此,您只能使用数字0到65535。

你也不能使用负数。