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; } 

¿No debería ser esto?

 char* p = pDevs[index].device_name; while( *p++) { ... } 
  • ¿Cómo utilizar la biblioteca JNI compilada por NDK en una aplicación Java normal no Android?
  • Error de Android: MultipartEntity, la solicitud enviada por el cliente fue sintácticamente incorrecta
  • Usando get () y put () para acceder a valores de píxeles en OpenCV para Java
  • Excepción java.lang.NoClassDefFoundError: com.google.android.gms.common.AccountPicker
  • Android: cómo cambiar el estilo de editar texto?
  • Android: ¿Cómo evitar que la imagen sea escalada en ImageView o ImageButton?
  • Página de detalles de las aplicaciones de lanzamiento de Android
  • Cómo utilizar ctags para autocompletar en vim
  • ¿cómo volver a la actividad principal en android?
  • La captura de pulsaciones de teclas cuando el teléfono Android está en modo de suspensión profunda
  • Android Context.bindService devuelve siempre falso y el objeto ServiceConnection nunca se activa
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.