web-dev-qa-db-fra.com

java.lang.IllegalArgumentException: ne peut utiliser que les 16 bits inférieurs pour requestCode

J'écris une application où Activity A lance Activity B en utilisant 

startActivityForResult(intent, -101);

mais lorsqu'il a été appelé, il a répondu avec le journal d'erreurs suivant:

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)

Cela pourrait probablement être -101 mais je ne suis pas sûr. Quelqu'un a-t-il une idée à ce sujet?

28
CoDe

Vous devez passer un nombre positif à startActivityForResult.

23
Stephane Mathis

Vous obtenez cette exception uniquement dans Android.support.v4.app.FragmentActivity et pas lorsque vous utilisez Android.app.Activity.

startActivityForResult() dans FragmentActivity exige que la requestCode soit de 16 bits, ce qui signifie que la plage va de 0 à 65535.

De plus, validateRequestPermissionsRequestCode dans FragmentActivity exige que requestCode soit de 16 bits, ce qui signifie que la plage est comprise entre 0 et 65535.

Pour plus d'informations (si vous souhaitez voir le code source): https://stackoverflow.com/a/33331459/4747587

104
Henry

Il est également bon de mentionner que cela peut arriver si vous utilisez un nombre supérieur à 2 ^ 16/2 (soit 32768). Il existe donc fondamentalement 2 ^ 15 options pour ne pas gâcher cela.

Explication: 16 bits peuvent représenter l’un des 65 536 nombres, mais la moitié d’entre eux sont négatifs. 

25
vanomart

Vous ne pouvez utiliser que les 16 bits inférieurs pour les moyens requestCode - en termes binaires - vous pouvez utiliser

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

En termes décimaux ("nombre"), cela permet des combinaisons 2^16 = 65536. Par conséquent, vous ne pouvez utiliser que les chiffres 0 dans 65535.

Vous ne pouvez pas non plus utiliser de nombres négatifs.

9
ONE

La bonne réponse est que vous devriez utiliser un nombre de 16 bits à cette fin. La solution la plus sûre consiste à toujours définir le code de votre demande sur short. Si le programmeur tente d'écrire un nombre supérieur à 16 bits, le IDE ne vous laissera pas continuer car il y aura une erreur. 

1
Tzegenos