我試圖使用Android NDK。如何將數組從JNI返回給Java?
有沒有辦法返回一個數組(在我的情況的int[]
)在JNI創建的Java?如果是這樣,請提供一個JNI函數的簡單例子。
-Thanks
我試圖使用Android NDK。如何將數組從JNI返回給Java?
有沒有辦法返回一個數組(在我的情況的int[]
)在JNI創建的Java?如果是這樣,請提供一個JNI函數的簡單例子。
-Thanks
如果你檢查的文件,仍然有應該是你最初的問題的一部分問題。在這種情況下,示例中的JNI函數創建了一些數組。外陣列由一個「物件」陣列用JNI函數NewObjectArray()
創建的。從JNI的角度來看,這是一個二維數組,它是一個包含許多其他內部數組的對象數組。
下面的for循環創建內陣列它們是int類型使用JNI函數NewIntArray()
[]的。如果你只是想回到整數的一維數組,然後NewIntArray()
功能是你會用什麼來創造的返回值。如果你想創建的字符串的一維數組,那麼你應該使用NewObjectArray()
功能,但與類不同的參數。
由於要返回一個int數組,那麼你的代碼將是這個樣子:
JNIEXPORT jintArray JNICALL Java_ArrayTest_initIntArray(JNIEnv *env, jclass cls, int size)
{
jintArray result;
result = (*env)->NewIntArray(env, size);
if (result == NULL) {
return NULL; /* out of memory error thrown */
}
int i;
// fill a temp structure to use to populate the java int array
jint fill[size];
for (i = 0; i < size; i++) {
fill[i] = 0; // put whatever logic you want to populate the values here.
}
// move from the temp structure to the java structure
(*env)->SetIntArrayRegion(env, result, 0, size, fill);
return result;
}
,如果有人想知道如何返回String []數組:
的java代碼
private native String[] data();
本地出口
JNIEXPORT jobjectArray JNICALL Java_example_data() (JNIEnv *, jobject);
本地代碼
JNIEXPORT jobjectArray JNICALL
Java_example_data
(JNIEnv *env, jobject jobj){
jobjectArray ret;
int i;
char *message[5]= {"first",
"second",
"third",
"fourth",
"fifth"};
ret= (jobjectArray)env->NewObjectArray(5,
env->FindClass("java/lang/String"),
env->NewStringUTF(""));
for(i=0;i<5;i++) {
env->SetObjectArrayElement(
ret,i,env->NewStringUTF(message[i]));
}
return(ret);
}
從鏈接: http://www.coderanch.com/t/326467/java/java/Returning-String-array-program-Java
是啊,我這樣做了。我在理解與我的問題(最後一個)有關的例子時遇到了困難,我想知道是否有人會介紹一個簡單的例子,只返回一個int []。 – RyanCheu 2009-10-22 21:30:07
編輯:請忽略我以前的評論,上面的代碼確實有效。 謝謝!這非常有幫助。 – RyanCheu 2009-10-23 21:23:46
EDIT2:代碼有效,但你必須在SetIntArrayRegion(...)中更改tmp來填充。 – RyanCheu 2009-10-23 21:25:08