问题 如何使用jobject数组? (JNI)


实际上,我称之为c ++函数:

JNIEXPORT void JNICALL Java_test_main_JniFunctions_testObject(JNIEnv * env,jobject obj,jobjectArray objArray){....}

而我想做的是取回原始对象的值。考虑此对象的java代码声明:

jniFct.testObject(new Object[][]
        {   
            {"testTable"},
            {0, 0.0, "aaa"},
            {1, 1.1, "bbb"},
            {2, 2.2, "ccc"}
        });

例如,从第二列的第三行获取值。

任何人都知道如何做到这一点?


3308
2017-11-10 13:09


起源



答案:


jobject row = env->GetObjectArrayElement(objArray, 2);
jobject value = env->GetObjectArrayElement((jobjectArray)row, 1);
const char* cvalue = env->GetStringUTFChars((jstring)value, 0);

12
2017-11-10 13:20



谢谢,但它给了我那个错误::> IntelliSense:类型为“const char”的值 “不能用于初始化类型为”char“的实体“如果我将”“char *”“”更改为“”“string”“”,它会给我那种价值“”“<ü”“”所以...... - Jsncrdnl
编译错误会更有趣。我想,你需要使用 const char* cvalue。我会编辑答案...... - weekens
好极了!它成功了!!谢谢 ! ^^ - Jsncrdnl
还是有问题! ^^无论如何,c ++代码知道数据类型(例如:string,int,double,...),以便我可以将它放入好的变量类型?或者是否有一种通用类型可以用来存储这些变量? - Jsncrdnl


答案:


jobject row = env->GetObjectArrayElement(objArray, 2);
jobject value = env->GetObjectArrayElement((jobjectArray)row, 1);
const char* cvalue = env->GetStringUTFChars((jstring)value, 0);

12
2017-11-10 13:20



谢谢,但它给了我那个错误::> IntelliSense:类型为“const char”的值 “不能用于初始化类型为”char“的实体“如果我将”“char *”“”更改为“”“string”“”,它会给我那种价值“”“<ü”“”所以...... - Jsncrdnl
编译错误会更有趣。我想,你需要使用 const char* cvalue。我会编辑答案...... - weekens
好极了!它成功了!!谢谢 ! ^^ - Jsncrdnl
还是有问题! ^^无论如何,c ++代码知道数据类型(例如:string,int,double,...),以便我可以将它放入好的变量类型?或者是否有一种通用类型可以用来存储这些变量? - Jsncrdnl