我正在开发一个 Qt 项目,该项目将自定义活动作为主要活动运行,我需要从 C++ 调用 Java 以及从 Java 调用 C++,但出现此错误:
F art : art/runtime/java_vm_ext.cc:470] JNI DETECTED ERROR IN APPLICATION: JNI GetObjectClass called with pending exception java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
当我尝试使 C++ 和 Java 以这种方式交互时会发生这种情况:
public class TestActivity extends QtActivity
{
private native void resultRead(String result);
private String m_result;
public String getResult()
{
return m_result;
}
@Override
protected void onNewIntent(Intent intent)
{
... //doing something with intent
m_result = readResult();
resultRead(m_result);
}
}
static void onResultRead(JNIEnv *env, jobject /*thiz*/, jstring value)
{
qDebug() << env->GetStringUTFChars(value, nullptr);
}
void Foo::init()
{
QAndroidJniEnvironment env;
JNINativeMethod methods[] {{"resultRead", "(Ljava/lang/String;)V", reinterpret_cast<void *>(onResultRead)}};
jclass objectClass = env->GetObjectClass(QtAndroid::androidActivity().object<jobject>());
env->RegisterNatives(objectClass, methods, sizeof(methods) / sizeof(methods[0]));
env->DeleteLocalRef(objectClass);
}
或者这样:
qDebug() << QtAndroid::androidActivity().callObjectMethod("getResult", "()Ljava/lang/String;").toString();
有什么建议吗?谢谢
编辑: Foo 类不在主线程上