2017-02-18 3 views
2

私は自分のネイティブメソッドから呼び出され、ネイティブコードにオブジェクト配列を返します。jjectのjobjectarrayから要素にアクセスする方法

次のように私は私のネイティブコードでこの配列を受け取る

Object[] arr = new Object[10]; 
    arr[0] = new Integer(12); 
    arr[1] = new Float(25.5f); 

、としてオブジェクト配列の要素が設定され、

jobjectArray a = (jobjectArray)(*env)->CallStaticObjectMethodA(env, <class_id>, <method_id>, <parameter_list>); 

私が記憶されている要素のそれぞれのデータ型を持っていますオブジェクト配列したがって、データ型に基づいて、ネイティブメソッドで対応する整数と浮動小数点値にどのようにアクセスできますか。

私は、次のことを試してみました

jobject obj = (*env)->GetObjectArrayElement(env, a, 0); 
    int num = (jint)obj; 

しかし、NUMに設定された値は、間違っています。

答えて

0

Integerintに変換すると、Javaは自動的にアンボックスされます。しかし、そのメカニックはCには存在しません。あなたがやっていることは、要素のメモリアドレスをとり、それをintと解釈することです。

あなたはC側のIntegerからintを取得したい場合は、あなたがintValueを呼び出す必要があります。

jobject objInteger = (*env)->GetObjectArrayElement(env, a, 0);  

jclass cInteger = (*env)->FindClass(env, "java/lang/Integer"); 
jmethodID intValue = (*env)->GetMethodID(env, cInteger, "intValue", "()I"); 
int i = (*env)->CallIntMethod(env, objInteger, intValue); 
+0

どうもありがとうございました。出来た。 – keerthana

関連する問題