我正在尝试从一个字符串对象中调用
我尝试了调用
String.getBytes()
方法,在JNI中获取字节数组。JNI有CallByteMethod
、CallByteMethodV
和CallByteMethodA
方法,可以返回jbyte,但没有返回Java字节数组的方法。我尝试了调用
CallByteMethod
方法,但是出现了错误:
我尝试的另一种代码是使用jbytearray的强制转换,像这样:JNI检测到应用程序中的错误:使用已删除的本地引用0xd5ec7fe1
jbyteArray keyBytes = (jbyteArray)(*env)->CallByteMethod(env, stringValue, getBytesMId);
因为IDE显示了一条警告
从整数中取指针,没有进行强制转换。
但接下来我又得到了一个不同的错误信息,它说:
JNI在应用程序中检测到错误:CallByteMethod的返回类型与byte[] java.lang.String.getBytes()不匹配
下面是我的代码:
JNIEXPORT jstring JNICALL
Java_net_jni_test_MainActivity_callTest(JNIEnv *env, jobject instance) {
jstring stringValue = "test";
jclass stringClass = (*env)->FindClass(env, "java/lang/String");
jmethodID getBytesMId = (*env)->GetMethodID(env, stringClass, "getBytes", "()[B");
jbyteArray keyBytes = (*env)->CallByteMethod(env, stringValue, getBytesMId);
return (*env)->NewStringUTF(env, "1111");
}
CallObjectMethod()
。CallByteMethod()
用于返回byte
的方法。 - user207421