我已经了解了如何将参数从Java发送到JNI函数。我首先尝试发送一个ArrayList,因为我试图获取Android电话簿。
在遇到很多问题后,我很容易确保发送一个简单的参数(String)。
这是我的函数Java声明:
public static native void nativeCallback(String params);
这是JNI函数:
JNIEXPORT void JNICALL
Java_example_nativeCallback(JNIEnv* env,jstring params)
我检查并正在调用该函数。我用它来查看是否实际发送了一个String:
int sizeOfChain = env->GetStringLenght(params);
std::ostringstream convert;
convert<<sizeOfChain;
convert.flush();
std::string finalString = convert.str();
打印 finalString 时,它为0。
这是从Java调用函数的方式:
nativeCallback("TEST_STRING");
另外,发送ArrayList作为jobjectArray有效吗?
答案 0 :(得分:1)
尝试这样做以从jstring
获取C字符串const char *str= env->GetStringUTFChars(params, NULL);
printf("String: %s\n", str);
env->ReleaseStringUTFChars(params, str);