¿Cómo especificar matriz de clase en el parámetro GetMethodID método de firma?
¿Cómo se especifica en GetMethodID
parámetro de la firma de función que la función que estoy recibiendo id para acepta matriz de una clase personalizada?
Tengo una función en java con la firma:
- Crear mapa de bits de la matriz de bytes, que se descomprime desde un archivo JPEG a través de libjpeg
- JNI Warnig tipo de retorno esperado 'L' calling LocationManager.requestLocationUpdates
- ¿Cuáles son las consecuencias si intentamos conectar un hilo nativo permanentemente a la DVM (JVM)?
- ¿Cómo compartir una variable entre Java y C en android JNI?
- C ++ y JNI - Cómo pasar una matriz en un jfloatArray
void getData( ListDataClass[] arryData )
Y quiero obtener el id de método de esta función de la interfaz JNI utilizando la función GetMethodID.
Para eso he mencionado en el parámetro de la firma de la función como siguiendo:
"([myPackeg/ListDataClass)V"
Pero esto no está funcionando y consigo excepción como Method Not Found
. Lo mismo funciona si especifico matriz de clase de cadena.
- Mantener los métodos Java llamados desde Android JNI
- No se pudo cargar la biblioteca libopencv_java.so
- Multidex Android, UnsatisfiedLinkError - no pudo encontrar el archivo .so
- Cuándo utilizar JNIEXPORT y JNICALL en Android NDK?
- No se puede hacer JNI llamar desde c ++ a java en android lollipop usando jni
- Cómo utilizar c / cpp biblioteca / funciones en android
- Manejo de excepciones de Android JNI
- Cómo agregar un servicio de sistema a Android Framework
Las firmas de tipo JNI para clases completamente calificadas toman la forma:
Lclass/path/ClassName;
Por ejemplo:
"Ljava/lang/String;" // String "[Ljava/lang/String;" // String[] (array)
Se construye una firma de método a partir de estos, colocando primero los argumentos entre paréntesis y el tipo de retorno después del paréntesis derecho. Por ejemplo:
long f (int n, String s, int[] arr); // Java method "(ILjava/lang/String;[I)J" // JNI type signature
Usted puede encontrar los documentos para las firmas de tipo JNI aquí , que es donde tomé prestado el ejemplo anterior.
En su ejemplo específico:
void getData( ListDataClass[] arryData ) // Java method "([Lclass/path/ListDataClass;)V" // JNI type signature
Nota: la firma del tipo exacto depende de la ruta de la clase.
A continuación, puede encontrar el ID del método como sigue (suponiendo que C ++ y un puntero JNIEnv llamado env):
jclass clz = env->FindClass("class/path/ListDataClass"); jmethodID mid = env->GetMethodID(clz, "getData", "([Lclass/path/ListDataClass;)V");
- ¿Cómo codificar una nueva función compatible con versiones anteriores en Android SDK?
- Mostrar la pila trasera de Android