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

时间:2014-08-27 14:27:19

标签: android start-activity

我正在编写一个应用程序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 但我不确定。有没有人对此有任何想法?

9 个答案:

答案 0 :(得分:111)

您只能在android.support.v4.app.FragmentActivity中获得此异常,而在使用android.app.Activity时则不会。

startActivityForResult()中的

FragmentActivity要求requestCode为16位,表示范围为0到65535.

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

有关详情(如果您想查看源代码):https://stackoverflow.com/a/33331459/4747587

答案 1 :(得分:43)

如果您使用的是ActivityResult API,请添加此依赖项以解决此问题:

implementation 'androidx.fragment:fragment:1.3.0-alpha06'

答案 2 :(得分:25)

如果使用大于2 ^ 16/2(即32768)的数字,也可能会发生这种情况,因此基本上有2 ^ 15个选项可以解决这个问题。< / p>

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

答案 3 :(得分:23)

您需要将正数传递给startActivityForResult

答案 4 :(得分:9)

对于requestCode,您只能使用低16位 - 以二进制表示 - 您可以使用

0000000000000000 (16 bits) to 1111111111111111 (16 bits)

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

您也不能使用负数。

答案 5 :(得分:2)

对于正在使用新的ActivityResult API的用户,

如果您使用新方法(ActivityResult)打开新的活动。

registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { 
    result ->
}

您必须同时使用以下两种依赖关系

implementation 'androidx.activity:activity:1.2.0-beta01'
implementation 'androidx.fragment:fragment:1.3.0-beta01'

答案 6 :(得分:2)

只需要为activityforresult API 添加两个主要的依赖

对于科特林

implementation 'androidx.activity:activity-ktx:1.3.0-alpha03'
implementation 'androidx.fragment:fragment-ktx:1.3.0'

对于Java

implementation 'androidx.activity:activity:1.3.0-alpha03'
implementation 'androidx.fragment:fragment:1.3.0'

检查 here 以获取最新版本。

答案 7 :(得分:1)

正确的答案是您应该为此使用16位数字。 最安全的解决方案是始终将您的请求代码设置为short。如果程序员尝试写入大于16位的数字,则IDE不会让您继续进行,因为会出现错误。

答案 8 :(得分:0)

只需添加

对于科特林

implementation 'androidx.fragment:fragment-ktx:1.3.3'