我的建议 :
创建一个将接收字符串的类(您也可以使用接口或抽象类):
class ResultHandler {
public void onReturnedString(String str)
{
/* Do something with the string */
}
}
然后更改函数的原型:
public native void getMessagewithoutReturn(ResultHandler handler);
并且本机函数将变为:
void Java_com_foo_bar_getMessagewithoutReturn(JNIEnv *env, jobject thiz, jobject handler);
现在您必须调用处理程序的 onReturnedString,因此您必须使用 JNI 函数:
jmethodID mid;
jclass handlerClass = (*env)->FindClass(env, "com/foo/bar/ResultHandler");
if (handlerClass == NULL) {
/* error handling */
}
mid = (*env)->GetMethodID(env, handlerClass, "onReturnedString", "(Ljava/lang/String;)V");
if (mid == NULL) {
/* error handling */
}
然后当你需要调用该函数时:(我认为 resultString 是一个 jstring)
(*env)->CallVoidMethod(env, handler, mid, resultString);
我还没有测试过代码,但你有基本的想法。
一些参考资料和示例代码here