jni數組使用(二)
上一篇說到在java中調用c++函數中,如何使用jni數組。
下麵談一談在回調中如何使用jni數組。
假如有一個java函數:
- public void Receive(char buffer[],int length)
我們需要在c++中調用這個函數,在jni中該如何實現數組的轉換?(本篇不涉及jni的回調函數的實現機製)
實現如下:
- static void receive_callback(unsigned char *buf, int len)
- {
- int i;
- JNIEnv* env = AndroidRuntime::getJNIEnv();//外部函數,獲得java環境變量
- jcharArray array = env->NewCharArray(len);//定義數據變量
- jchar *pArray ;
- if(array == NULL){
- LOGE("receive_callback: NewCharArray error.");
- return;
- }
- pArray = (jchar*)calloc(len, sizeof(jchar));//開辟jchar類型內存空間
- if(pArray == NULL){
- LOGE("receive_callback: calloc error.");
- return;
- }
- //copy buffer to jchar array
- for(i = 0; i < len; i++)
- {
- *(pArray + i) = *(buf + i);//複製buf數據元素到pArray內存空間
- }
- //copy buffer to jcharArray
- env->SetCharArrayRegion(array,0,len,pArray);//複製pArray的jchar數據元素到jcharArray
- //invoke java callback method
- env->CallVoidMethod(mCallbacksObj, method_receive,array,len);//調用回調函數,method_receive = env->GetMethodID(clazz, "Receive", "([CI)V");
- //release resource
- env->DeleteLocalRef(array);
- free(pArray);
- pArray = NULL;
- checkAndClearExceptionFromCallback(env, __FUNCTION__);//外部函數
- }
最後更新:2017-04-03 12:55:58