私はJNIとC++の新機能ですが、ここではAndroidのJavaからJNIへの配列を渡します.JNIでは配列をBubbleで並べ替えるだけです。しかし、これは決してうまくいかなかったようです。配列は決してソートされないということです。配列が一度も渡されたことがないか、またはJNIの関数にいくつかの問題があるかどうかはわかりません。AndroidでJNIからJavaに配列を返す方法は?
デモコードは以下のとおりです。
ファイル.H:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_jni_jniDemo_JniInterface */
#ifndef _Included_com_jni_jniDemo_JniInterface
#define _Included_com_jni_jniDemo_JniInterface
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_jni_jniDemo_JniInterface
* Method: getString
* Signature:()Ljava/lang/String;
*/
JNIEXPORT jintArray JNICALL Java_com_jni_jniDemo_JniInterface_arraySort
(JNIEnv *, jobject, jintArray);
#ifdef __cplusplus
}
#endif
#endif
ファイルた.cpp:
int sort(int &a, int &b){
a = a + b;
b = a - b;
a = a - b;
}
JNIEXPORT jintArray JNICALL
Java_com_jni_jniDemo_JniInterface_arraySort(JNIEnv *env, jobject obj, jintArray jArr) {
jint *arr = env -> GetIntArrayElements(jArr, 0);
int len = env -> GetArrayLength(jArr);
for(int i = 0; i < len; i++){
for(int j = 0; j < len - i -1; j++){
if(arr[j] > arr[j + 1]){
sort(arr[j], arr[j + 1]);
}
}
}
env -> ReleaseIntArrayElements(jArr, arr, JNI_COMMIT);
return jArr;
}
ファイルの.java:
private int[] array = {7, 34, 2, 44, 6, 0, 127, 9};
private int[] newArray;
for(int i = 0; i < array.length; i++){
System.out.println("Before sort:" + String.valueOf(array[i]));
}
jniInterface = new JniInterface();
newArray = jniInterface.arraySort(array);
for(int j = 0; j < newArray.length; j++){
System.out.println("After sort:" + String.valueOf(newArray[j]));
}
任意のアイデア?
'JNIEXPORT jstring JNICALL Java_com_jni_jniDemo_JniInterface_arraySort' - ' jstring'で指定された戻り値型を持っているようです。 –
さらに、あなたのソート機能が頭を痛めます。 – MuertoExcobito
@Mike M大変申し訳ありませんが、本当に私の間違いです!ありがとう! –