Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


JNI Android – Convertir char * en matriz de bytes y devolverlo a java

Inicialmente utilicé una función para devolver un char * a java como cadena UTF-8, pero como seguía recibiendo errores, escribí la siguiente función para devolver un char* como un byte[] Java byte[] , para que pudiera intentar convertir el Matriz en una cadena en el lado java:

 jbyteArray Java_com_vektor_amapper_util_InputDeviceManager_getDevNameBytes(JNIEnv* env, jobject thiz, jint index) { if(pDevs[index].device_name == NULL) return NULL; int n=0; while(pDevs[index].device_name){ n++; } if (n==0) return NULL; jbyteArray arr = (*env)->NewByteArray(env, n); (*env)->SetByteArrayRegion(env,arr,0,n, (jbyte*)pDevs[index].device_name); return arr; } 

Pero cuando lo llamo mi aplicación se bloquea. ¿Me estoy perdiendo de algo?

Actualización: La condición faltaba un ++ y esto causó un bucle infinito. Pero ahora con el siguiente código:

 jbyteArray Java_com_vektor_amapper_util_InputDeviceManager_getDevNameBytes(JNIEnv* env, jobject thiz, jint index) { int n=0; if(pDevs[index].device_name == NULL) return NULL; while(pDevs[index].device_name++){ n++; } if(n==0) return NULL; jbyteArray arr = (*env)->NewByteArray(env, n); (*env)->SetByteArrayRegion(env,arr,0,n, (jbyte*)pDevs[index].device_name); return arr; } 

Tengo esta extraña advertencia de JNI:

06-15 22: 40: 02.303: W / dalvikvm (7616): JNI ADVERTENCIA: jsize negativo (NewByteArray)

¿Cómo puede ser, ya que sólo estoy aumentando el valor de n ?

Actualización 2: el código siguiente funciona:

 jbyteArray Java_com_vektor_amapper_util_InputDeviceManager_getDevNameBytes( JNIEnv* env, jobject thiz, jint index) { if(pDevs[index].device_name == NULL) return NULL; int n=0; char* p = pDevs[index].device_name; while(*p++){ n++; } if(n<=0) return NULL; jbyteArray arr = (*env)->NewByteArray(env, n); (*env)->SetByteArrayRegion(env,arr,0,n, (jbyte*)pDevs[index].device_name); return arr; } 

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.