Вызов нестатического метода на Android из JNI - PullRequest
0 голосов
/ 04 октября 2011

Я хочу вызвать нестатический метод на Android с помощью JNI.Я могу вызывать статические методы, используя CallStaticVoidMethod.Для вызова нестатических методов я использовал CallVoidMethod.Это не работает.

Может кто-нибудь сказать мне правильный код для вызова нестатического метода Android Из JNI?

jmethodID method = env->GetMethodID(gJniRefCached.ImsFwkLoaderClass, "DispVideo", "([BII)V");

env-> CallVoidMethod (gJniRefCached.ImsFwkLoaderClass, метод, arr, ширина, высота);

Я также пытался использовать объект класса с кодом jclass cls = env->GetObjectClass(obj); jmethodID method = env->GetMethodID(cls, "DispVideo", "([BII)V"); env->CallVoidMethod(cls, method,arr,width,height);

1 Ответ

9 голосов
/ 05 октября 2011

Чтобы вызвать метод экземпляра, необходимо предоставить экземпляр класса, к которому относится метод belng, представленный как jobject. Однако в обоих примерах вы пытаетесь вызвать метод экземпляра с экземпляром определения класса, представленным как jclass.

Попробуйте следующее:

jclass cls = env->GetObjectClass(obj);
jmethodID method = env->GetMethodID(cls, "DispVideo", "([BII)V");
env->CallVoidMethod(obj, method, arr, width, height);

Обратите внимание на небольшую разницу в третьей строке кода, где я использую obj в качестве первого параметра вместо cls.

Это различие можно увидеть также на странице документации для функций JNI метода экземпляра: http://download.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html#wp16656

Посмотрите на GetMethodID и Call<type>Method - один занимает jclass, другой - jobject.

...