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
_でのみ発生し、_Android.app.Activity
_を使用する場合は発生しません。
FragmentActivity
のstartActivityForResult()
では、requestCode
が16ビットである必要があります。つまり、範囲は0〜65535です。
また、validateRequestPermissionsRequestCode
のFragmentActivity
には、requestCode
が16ビットである必要があります。これは、範囲が0〜65535であることを意味します。
詳細情報(ソースコードを表示する場合): https://stackoverflow.com/a/33331459/4747587
また、2 ^ 16/2(32768)よりも大きい数を使用するとこれが発生する可能性があることを言及しておくとよいでしょう。
説明:16ビットは65536の数値の1つを表すことができますが、それらの半分は負です。
RequestCodeの手段には、バイナリ用語で下位16ビットのみを使用できます。
0000000000000000 (16 bits) to 1111111111111111 (16 bits)
。
10進数(「番号」)の用語では、2^16 = 65536
の組み合わせ。したがって、数字の0は65535までしか使用できません。
負の数も使用できません。
正しい答えは、この目的には16ビットの数値を使用する必要があるということです。そのための最も安全な解決策は、常にリクエストコードをshort
として設定することです。プログラマが16ビットを超える数を書き込もうとすると、IDEはエラーが発生するため続行できません。