web-dev-qa-db-ja.com

java.lang.IllegalArgumentException:requestCodeには下位16ビットのみを使用できます

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かもしれませんが、わかりません。誰もこれについて何か考えがありますか?

36
CoDe

startActivityForResultに正の数を渡す必要があります。

24
Stephane Mathis

この例外は_Android.support.v4.app.FragmentActivity_でのみ発生し、_Android.app.Activity_を使用する場合は発生しません。

FragmentActivitystartActivityForResult()では、requestCodeが16ビットである必要があります。つまり、範囲は0〜65535です。

また、validateRequestPermissionsRequestCodeFragmentActivityには、requestCodeが16ビットである必要があります。これは、範囲が0〜65535であることを意味します。

詳細情報(ソースコードを表示する場合): https://stackoverflow.com/a/33331459/4747587

118
Henry

また、2 ^ 16/2(32768)よりも大きい数を使用するとこれが発生する可能性があることを言及しておくとよいでしょう。

説明:16ビットは65536の数値の1つを表すことができますが、それらの半分は負です。

26
vanomart

RequestCodeの手段には、バイナリ用語で下位16ビットのみを使用できます。

0000000000000000 (16 bits) to 1111111111111111 (16 bits)

10進数(「番号」)の用語では、2^16 = 65536の組み合わせ。したがって、数字の0は65535までしか使用できません。

負の数も使用できません。

9
ONE

正しい答えは、この目的には16ビットの数値を使用する必要があるということです。そのための最も安全な解決策は、常にリクエストコードをshortとして設定することです。プログラマが16ビットを超える数を書き込もうとすると、IDEはエラーが発生するため続行できません。

2
Tzegenos