extern "C"
JNIEXPORT void JNICALL
Java_com_example_jni1_JniInterface_passObj(JNIEnv *env, jobject thiz, jobject bean, jstring name,
jint value) {
// TODO: implement passObj()
//1.获取jclass
jclass jbean = env->GetObjectClass(bean);
//2.获取jmetholdid
jmethodID jsetstr = env->GetMethodID(jbean, "setStr1", "(Ljava/lang/String;)V");
// call method
env->CallVoidMethod(bean, jsetstr, name);
//静态方法
jmethodID jstaticMethold = env->GetStaticMethodID(jbean,"dublecount", "()I");
env->CallStaticIntMethod(jbean, jstaticMethold);
/* c++ 调用java类的方法,该方法参数为object类型,调用java bean中的 public void getStudentsInfo(Students stu)方法
* 1.先获取java类的jclass
* 2.找到参数类的class
* 3.调用参数类的构造方法,创建参数类,构造方法的方法名永远是<init>
* 4.call method */
jclass jstuclazz = env->FindClass("com/example/jni1/Students");
jmethodID jstu_construct = env->GetMethodID(jstuclazz, "<init>", "(Ljava/lang/String;I)V");
//构造函数中有String 类型的参数时,不能直接用“string”,这个类型是const char*类型,需要新建jstring类型的参数
jobject jstubj = env->NewObject(jstuclazz, jstu_construct, env->NewStringUTF("tom"), 600);
jmethodID jgetinfo = env->GetMethodID(jbean, "getStudentsInfo",
"(Lcom/example/jni1/Students;)V");
env->CallVoidMethod(bean, jgetinfo, jstubj);
}
Android JNI 调用java方法
最新推荐文章于 2024-08-03 23:19:11 发布