Подтвердить что ты не робот

Java.lang.IllegalArgumentException: может использовать только младшие 16 бит для requestCode

Я пишу приложение, где 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, но я не уверен. Кто-нибудь знает об этом?

4b9b3361

Ответ 1

Вам нужно передать положительное число на startActivityForResult.

Ответ 2

Вы получаете это исключение только в android.support.v4.app.FragmentActivity, а не при использовании android.app.Activity.

startActivityForResult() в FragmentActivity требует, чтобы requestCode состоял из 16 бит, то есть диапазон от 0 до 65535.

Кроме того, validateRequestPermissionsRequestCode в FragmentActivity требует, чтобы requestCode состоял из 16 бит, то есть диапазон от 0 до 65535.

Для получения дополнительной информации (если вы хотите увидеть исходный код): fooobar.com/questions/176981/...

Ответ 3

Также полезно отметить, что это может произойти, если вы используете число больше 2 ^ 16/2 (это 32768), так что в основном 2 ^ 15 вариантов, чтобы не испортить это.

Объяснение: 16 бит могут представлять один из 65536 номеров, однако половина из них отрицательна.

Ответ 4

Вы можете использовать только младшие 16 бит для средства requestCode - в двоичных выражениях - вы можете использовать

0000000000000000 (16 bits) to 1111111111111111 (16 bits).

В десятичных ( "числовых" ) условиях это позволяет использовать комбинации 2^16 = 65536. Таким образом, вы можете использовать только цифры 0 до 65535.

Вы также не можете использовать отрицательные числа.