JNI中的Array创建与C++回调Java方法
来源:互联网 发布:微软软件license模式 编辑:程序博客网 时间:2024/05/18 16:55
比如需要调用setRecResult
方法来给labels和confidences两个数组进行赋值,如下:
private int[] labels; private double[] confidences; public void setRecResult(int[] labels,double[] confideces){ this.labels = labels; this.confidences = confideces; } private native void test();
在JNI层,创建并初始化Array,然后进行回调:
/* * Class: com_pax_cvandroid_FaceDetect * Method: test * Signature: ()V */JNIEXPORT void JNICALL Java_com_pax_cvandroid_FaceDetect_test (JNIEnv *jenv, jobject thiz){ int size = 5; /** * create array */ jintArray jlabelArr = jenv->NewIntArray(size); jint *labelArr = jenv->GetIntArrayElements(jlabelArr,NULL); jdoubleArray jconfidencesArr = jenv->NewDoubleArray(size); jdouble *confidencesArr = jenv->GetDoubleArrayElements(jconfidencesArr,NULL); /** * init array */ int label = -1; double confidence = 0.1f; for(int i = 0;i<size;i++){ labelArr[i] = i; confidencesArr[i] = confidence; } /** * release the array */ jenv->ReleaseIntArrayElements(jlabelArr,labelArr,0); jenv->ReleaseDoubleArrayElements(jconfidencesArr,confidencesArr,0); /** * call the java method */ jclass faceDetectClass = jenv->GetObjectClass(thiz); jmethodID methodId = jenv->GetMethodID(faceDetectClass,"setRecResult","([I[D)V"); jenv->CallVoidMethod(thiz,methodId,jlabelArr,jconfidencesArr);}
GetMethodID方法:
jmethodID GetMethodID(jclass clazz, const char* name, const char* sig) { return functions->GetMethodID(this, clazz, name, sig); }
如果不知道第三个参数怎么设置,这里有个很方便的做法就是,在java代码中声明一个本地方法(这个本地方法中的参数跟回调方法中的参数一模一样的)
如下:
private native void testSignature(int[] labels,double[] confidences);
利用javah自动生成头文件:
javah -d ../jni -jni com.pax.cvandroid.FaceDetect
然后看下对应的头文件如下:
0 0
- JNI中的Array创建与C++回调Java方法
- JNI中的C回调java中的方法
- 安卓JNI--JNI底层C回调Java方法
- JNI中C回调java方法
- Android jni 使用C语言调用java中的log方法
- android jni中的java调c的两种方法
- JNI之C语言调用Java中的方法
- JNI开发基础篇:C语言调用Java中的方法
- jni - c 调用java方法
- JNI C与JAVA互调
- JNI C创建Java字符串数组
- jni回调java方法
- String array from C program to Java(JNI)
- Android Jni 创建多线程调用Java方法
- Android-本地方法C调用Java中的方法/NDK-JNI开发实例(六)
- JNI------Java调用C语言中的MessageBox
- java JNI 实现原理 (三) JNI中的RegisterNatives方法
- java jni 调用cpp文件中的方法
- 返回的数据
- PS基础教程
- React-Native与iOS原生的集成步骤
- comboBox.SelectedItem与SelectedText区别
- Power Network POJ
- JNI中的Array创建与C++回调Java方法
- TensorFlow MNIST机器学习入门 input_data.py only integer scalar arrays can be converted to a scalar
- python类定义的讲解
- UE4与WEB服务器交互(json)
- 关于导航栏透明和渐变的一些设置
- AndroidStudio打包出现"xxx" is not translated in "zh" (Chinese) [MissingTranslation]
- 一道简单而又不简单的面试题
- 在iOS中创建React-Native页面,并跳转到原生页面
- Android线程池的使用