2014-08-27 2 views
19

Я пишу приложение, где Activity A запускает Activity B с использованиемjava.lang.IllegalArgumentException: Можно использовать только нижние 16 бит для requestCode

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

Изменить -101 на положительное число? – Simas

+1

Может использовать только нижний 16 для запроса Код: означает, что код запроса должен быть> 0 попробуйте startActivityForResult (цель, 101); – zapdroid

+1

Попробуйте это решение: https: //stackoverflow.com/a/44271392/2267723 –

ответ

22

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

17

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

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

+1

Предел составляет 65535, а не 32768. – Henry

+0

@Henry Да, номера negatif не используются –

80

Вы получаете это исключение только в 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

+0

Спасибо, Генри, это более полный ответ – darkangelo

7

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

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

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

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