java getmethodid_Android JNI 笔记 | GetObjectClass、FindClass和GetMethodID

GetObjectClass

jclass GetObjectClass(jobject obj)

obj 参数示意

jobject obj:Java 中传入的 object 类

使用小栗子(其中的 GetMethodID 函数请往下看):

extern "C"

JNIEXPORT jobject JNICALL

Java_....getList(JNIEnv *env, jobject instance, jobject listobj) {

....

// 获取 List 类

jclass ax_list_jclass = env->GetObjectClass(listobj);

// 获取 list 的 get方法

jmethodID listGetMe;

listGetMe = env->GetMethodID(ax_list_jclass, "get", "(I)Ljava/lang/Object;");

// 调用 list 的 get 方法获取list中第0个的 java 类。

jobject findObj = env->CallObjectMethod(listobj, listGetMe , 0);

....

}

FindClass(查找java中的类)

jclass FindClass(const char* name)

name 参数示意

const char* name:java中完整报名加类名,例如List类:"java/util/List"

小栗子:

extern "C"

JNIEXPORT jobject JNICALL

Java_....getList(JNIEnv *env, jobject instance) {

....

// 获取 List 类

jclass list_jclass = env->FindClass("java/util/List");

....

}

GetMethodID(查找Java类中的方法)

jmethodID GetMethodID(jclass clazz, const char* name, const char* sig)

参数一:jclass 查找到的java类

参数二:const char* name 方法名

name 参数示意

"" 构造函数

"add" 名为add的方法,可根据方法名修改

参数三:const char* sig 方法的返回值

sig参数示意:

boolean:Z、byte:B 、char:C、short:S、int:I

long:J、float:F、double:D、void:V、[数组]:[和类型

Object对象:L包名/类名; 或 包名/类名$标识嵌套类;

例子(方法 ->- 对应的sig):

void M1(int A,int B) ->- "(II)V"

void M2(String S) ->- "(Ljava/lang/String;)V"

void M3(int[] I) ->- "([I)V"

String M4(String S) ->- "(Ljava/lang/String;)Ljava/lang/String"

long M5(int I,Class class) ->- "(ILjava/lang/Class;)J"

void M6(long LONG) ->- "(J)V"

小栗子:

extern "C"

JNIEXPORT jobject JNICALL

Java_....getList(JNIEnv *env, jobject instance) {

....

// 获取 ArrayList 类

jclass list_jclass = env->FindClass("java/util/ArrayList");

// 获取 ArrayList 构造函数id

jmethodID list_init = env->GetMethodID(list_jcs, "", "()V");

// 创建一个 ArrayList 对象

jobject list_obj = env->NewObject(list_jcs, list_init, "");

// 获取 ArrayList 对象的 add() 的 methodID

jmethodID list_add = env->GetMethodID(list_jcs, "add", "(Ljava/lang/Object;)Z");

....

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值