Android ndk 如何在JNI中查找2D objectArray的大小

Android ndk 如何在JNI中查找2D objectArray的大小,android-ndk,java-native-interface,Android Ndk,Java Native Interface,我想在JNI的2D objectArray中查找行数和列数。我该怎么办?请任何人都能帮我解决这个问题。如果你有数组,你必须通过对象数组 java中的1d数组是JNI中原语的1d数组 二维数组是对象的数组 因此,对于这样的代码: public class PassArray { public static native void passBooleanArray(boolean [][] array); public static void main(String[] args) {

我想在JNI的2D objectArray中查找行数和列数。我该怎么办?请任何人都能帮我解决这个问题。

如果你有数组,你必须通过对象数组

java中的1d数组是JNI中原语的1d数组 二维数组是对象的数组

因此,对于这样的代码:

public class PassArray {
  public static native void passBooleanArray(boolean [][] array);

  public static void main(String[] args) {
    boolean [][] boolArray   = { { true, true, true }, {false, false, false} };
    passBooleanArray(boolArray);
  }
}
/* get size of the array */
jsize len = (*env)->GetArrayLength(env, array);

for(int i=0; i<len; i++) {

  /* get the array at following indexes of array; it will be referecende by C pointer */
  jbooleanArray body = (*env)->GetObjectArrayElement(env, array, i);
  jsize innerLen = (*env)->GetArrayLength(env, body);

  jboolean *booleanBody = (*env)->GetBooleanArrayElements(env, body, 0);
  for(int j=0; j<innerLen; j++) {
    /* do some stuff */
    printf("Boolean value: %s\n", booleanBody[j] == JNI_TRUE ? "true" : "false");
  }
  /* release body when you decide it is no longer needed */
  (*env)->ReleaseBooleanArrayElements(env, array, booleanBody, 0);
}
你需要这样的东西:

public class PassArray {
  public static native void passBooleanArray(boolean [][] array);

  public static void main(String[] args) {
    boolean [][] boolArray   = { { true, true, true }, {false, false, false} };
    passBooleanArray(boolArray);
  }
}
/* get size of the array */
jsize len = (*env)->GetArrayLength(env, array);

for(int i=0; i<len; i++) {

  /* get the array at following indexes of array; it will be referecende by C pointer */
  jbooleanArray body = (*env)->GetObjectArrayElement(env, array, i);
  jsize innerLen = (*env)->GetArrayLength(env, body);

  jboolean *booleanBody = (*env)->GetBooleanArrayElements(env, body, 0);
  for(int j=0; j<innerLen; j++) {
    /* do some stuff */
    printf("Boolean value: %s\n", booleanBody[j] == JNI_TRUE ? "true" : "false");
  }
  /* release body when you decide it is no longer needed */
  (*env)->ReleaseBooleanArrayElements(env, array, booleanBody, 0);
}
/*获取阵列的大小*/
jsize len=(*env)->GetArrayLength(env,数组);
for(int i=0;iGetObjectArrayElement(env,array,i);
jsizeinnerlen=(*env)->GetArrayLength(env,body);
jboolean*booleanBody=(*env)->GetBooleanArrayElements(env,body,0);
for(int j=0;jReleaseBooleanArrayElements(env,array,booleanBody,0);
}
更新:

请看这里:


对于工作示例代码。

使用
GetArrayLength