如何使用JNI中的int参数调用Java函数

时间:2014-02-12 16:50:35

标签: android java-native-interface

我在Activity中有一个静态Java函数。这个函数有int参数。我想从JNI调用此函数。我使用下面的代码来调用,但我不知道如何传递int参数:

在Java中:

public static void updateTopScoreLeaderboard(int score) {
    Log.i("", "updateTopScoreLeaderboard " + score);
}

在JNI:

if (JniHelper::getStaticMethodInfo(methodInfo, "com/nch/myApp/MyActivity", "updateTopScoreLeaderboard", "()V"))
{
    methodInfo.env->CallStaticObjectMethod(methodInfo.classID, methodInfo.methodID);
}
methodInfo.env->DeleteLocalRef(methodInfo.classID);

如果Java函数没有参数,那么该代码可以正常工作。但在这种情况下(有int参数),它不起作用。

1 个答案:

答案 0 :(得分:4)

您需要更改方法签名以匹配int参数,因此它是(I)V而不是()V,并且还将int参数添加到方法调用中:

int myInt = 0;

if (JniHelper::getStaticMethodInfo(methodInfo, "com/nch/myApp/MyActivity", "updateTopScoreLeaderboard", "(I)V"))
{
    methodInfo.env->CallStaticObjectMethod(methodInfo.classID, methodInfo.methodID, myInt );
}
methodInfo.env->DeleteLocalRef(methodInfo.classID);