0

我正在开发一个 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 类不在主线程上

4

0 回答 0