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