2013-04-19 3 views
1

Я разрабатываю приложение для Android, которое использует код JNI для выполнения некоторых вычислений с интенсивным вычислением. Один из моих собственных методов в java передает ArrayList в качестве аргумента для слоя JNI.NoSuchMethodError на JNI с ArrayList

Когда я пытаюсь использовать GET (INT индекс) ArrayList с:

jmethodID getAtIndex = env->GetMethodID(listClass, "get", "(I)Ljava/lang/Object"); 

Я получаю:

NoSuchMethodError: no method with name='get' signature= 
'(I)Ljava/lang/Object' in class Ljava/util/ArrayList; 

Однако, когда я использую javap -s java.util.ArrayList к получить подписи для этого метода. Я получаю ту же самую подпись, что и тот, который я использую в своем коде JNI.

Любые идеи? Спасибо заранее!

ответ

3

Вы упускаете с запятой на конце типа подписи, подписи типа класса Java имеют вид:

L fully-qualified-class-name ; 

Так Object будет Ljava/lang/Object; и полный тип подписи для метода будет be (I)Ljava/lang/Object;.

+0

Спасибо, что сделал трюк, хотя я закончил идти на другое решение! – unbekant

2

У вас есть подпись неправильная. Не создавайте подписи JNI вручную: скопируйте и вставьте из вывода javap -s. В этом случае вам не хватает точки с запятой.

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