我正在编写一个应用程序,其中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。
你也不能使用负数。