1. ホーム
  2. java

[解決済み] JNIからJavaに配列を返すには?

2022-05-30 03:12:57

質問

android NDKを使おうとしています。

配列を返す方法はありますか(私の場合は int[] )をJavaに返す方法はありますか? もしそうなら、これを行うJNI関数の簡単な例を提供してください。

-ありがとうございます

どのように解決するのですか?

ドキュメントを調べても、最初の質問の一部であるはずの質問がある場合。 この場合、例の JNI 関数では、いくつかの配列が作成されます。 外側の配列は、JNI 関数で作成された「オブジェクト」配列で構成されています。 NewObjectArray() . JNIの観点からは、2次元の配列はそれだけで、他の多くの内部配列を含むオブジェクト配列です。

次のforループは、JNI関数を使用してint[]型の内部配列を作成します。 NewIntArray() . もし、単にint型の1次元配列を返したいだけなら 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;
}