android - 通过 JNI 调用简单的 java 静态方法不起作用,尽管 C++ 编译并运行它

标签 android c++ qt java-native-interface qtandroidextras

考虑这个带有静态方法的 Java 类:

public class TestClass{
    public string str;
    public TestClass() {
        str = "Test From Java";
    }
    public static String staticMethod() {
        return "Test From Java";
    }
}

我已经在 C++ 文件中编写了这些代码行:

QAndroidJniObject str =  QAndroidJniObject::callStaticObjectMethod(
                                   "org/.../TestClass"
                                   ,"staticMethod"
                                   ,"(V)Ljava/lang/String;");

似乎一切正常,但我不知道如何使用 str 对象。我尝试使用 str.tostring() 方法将它转换为 QString 对象,但它总是返回一个空字符串。 为什么它不能按预期工作?我还测试了 ()Ljava/lang/String; 方法签名但没有成功!
提前致谢。

最佳答案

您应该在 <...> 中指定返回的 JNI 类型调用方法时:

QAndroidJniObject str =  QAndroidJniObject::callStaticObjectMethod<jstring>(
                               "org/.../TestClass"
                               ,"staticMethod");

QString string = str.toString();

这里不需要定义签名,因为你的函数没有参数。

关于android - 通过 JNI 调用简单的 java 静态方法不起作用,尽管 C++ 编译并运行它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28693031/

相关文章:

c++ - 什么时候用 Qt 在 opengl 中创建渲染上下文?

android - 如何在gridView中禁用listview的onclick和scrollbar

android - PunNub - 设备关闭时恢复丢失消息的最佳方法?

android - 将通用列表传递到 <include>

c++ - new 和 delete 内存泄漏

c++ - 流的重载产生两种不同的结果

c++ - 如何使用 Qtimer 添加 1 秒延迟

android - 展开操作 View 时的抽屉导航图标(汉堡包和箭头)动画

c++ - 通过引用传递值到线程并修改

qt - 如何从 Qt 中的应用程序关闭已打开的浏览器