studio programacion para herramientas desarrollo con avanzado aplicaciones android start-activity

android - programacion - java.lang.IllegalArgumentException: solo puede usar 16 bits inferiores para requestCode



manual android studio avanzado (5)

Estoy escribiendo una aplicación donde la Activity A lanza la Activity B usando

startActivityForResult(intent, -101);

pero cuando fue llamado, respondió con el siguiente registro de errores:

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)

Probablemente podría ser -101 pero no estoy seguro. ¿Alguien tiene alguna idea sobre esto?


La respuesta correcta es que debe usar un número de 16 bits para este propósito. La solución más segura para esto es establecer siempre el código de solicitud como short . Si el programador intenta escribir el número más de 16 bits, el IDE no le permitirá continuar porque habrá un error.


Necesitas pasar un número positivo para startActivityForResult .


Obtienes esta excepción solo en android.support.v4.app.FragmentActivity y no cuando usas android.app.Activity .

startActivityForResult() en FragmentActivity requiere que el startActivityForResult() sea ​​de 16 bits, lo que significa que el rango es de 0 a 65535.

Además, validateRequestPermissionsRequestCode en FragmentActivity requiere que requestCode sea ​​de 16 bits, lo que significa que el rango es de 0 a 65535.

Para obtener más información (si desea ver el código fuente): https://.com/a/33331459/4747587


Solo puede usar 16 bits más bajos para los medios requestCode, en términos binarios, puede usar

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

En términos decimales ("número"), esto permite 2^16 = 65536 combinaciones. Por lo tanto, solo puede usar los números 0 hasta el final de 65535.

Tampoco puedes usar números negativos.


También es bueno mencionar que esto puede suceder si usa un número mayor que 2 ^ 16/2 (que es 32768), por lo que hay básicamente 2 ^ 15 opciones para no arruinar esto.

Explicación: 16 bits pueden representar uno de 65536 números, sin embargo, la mitad de ellos son negativos.