2014-02-12 3 views
2

У меня есть статическая функция Java в Activity. Эта функция имеет параметр int. Я хочу вызвать эту функцию из JNI. Я использую ниже код для вызова, но я не знаю, как передать параметр INT:Как вызвать функцию Java с параметром int из JNI

В 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 param), он не работает.

ответ

4

Вы должны изменить подпись метода, чтобы соответствовать параметр целого типа, так что (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); 
+3

@huync Чтобы найти подписи использовать 'javap' , Например, 'javap -s -public com/nch/myApp/MyActivity | egrep -A 2 "updateTopScoreLeaderboard". Так же, как при запуске 'java', код нужно сначала скомпилировать и обязательно пройти в пути к классам, если это необходимо. –

+1

Это отличный ответ. – huync

+0

Вы должны вызывать 'CallStaticVoidMethod', а не' CallStaticObjectMethod', поскольку метод Java возвращает 'void', а не объект. –

Смежные вопросы