CoD*_*oDe 38 android start-activity
我正在编写一个Activity A
启动Activity B
使用的应用程序
startActivityForResult(intent, -101);
Run Code Online (Sandbox Code Playgroud)
但是在调用时,它会回复以下错误日志:
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)
Run Code Online (Sandbox Code Playgroud)
可能它可能是-101但我不确定.有没有人对此有任何想法?
Hen*_*nry 120
只有在android.support.v4.app.FragmentActivity
使用时才能获得此异常,而不是在使用时android.app.Activity
.
startActivityForResult()
in FragmentActivity
要求requestCode
为16位,表示范围为0到65535.
此外,validateRequestPermissionsRequestCode
in FragmentActivity
要求requestCode
为16位,意味着范围为0到65535.
有关详细信息(如果要查看源代码):https://stackoverflow.com/a/33331459/4747587
Sau*_*rat 75
如果您使用的是ActivityResult
API,请添加此依赖项以解决此问题:
implementation "androidx.fragment:fragment:1.3.4"
Run Code Online (Sandbox Code Playgroud)
van*_*art 26
还可以提一下,如果使用大于2 ^ 16/2的数字(即32768),可能会发生这种情况,因此基本上有2 ^ 15个选项可以不搞砸.
说明:16位可以代表65536个数字之一,但是,其中一半是负数.
Sha*_*aon 25
对于使用新 ActivityResult API 的用户,
如果你使用新的方式(ActivityResult)打开新的Activity。
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
result ->
}
Run Code Online (Sandbox Code Playgroud)
您必须同时使用以下两个依赖项
implementation 'androidx.activity:activity-ktx:1.2.0-rc01'
implementation 'androidx.fragment:fragment-ktx:1.3.0-rc02'
Run Code Online (Sandbox Code Playgroud)
ONE*_*ONE 10
您只能使用低16位的requestCode - 二进制 - 您可以使用
0000000000000000 (16 bits) to 1111111111111111 (16 bits)
.
在十进制("数字")术语中,这允许2^16 = 65536
组合.因此,您只能使用数字0一直到65535.
你也不能使用负数.
归档时间: |
|
查看次数: |
20851 次 |
最近记录: |