return result;
}
//C调用java中参数为string的方法
public voidprintString(String s){
System.out.println("我是java方法"+s);
}
}
2、c代码的方法:
①、调用java中的helloFromJava()方法
//obj 代表的是调用这个c代码的java对象
JNIEXPORT void JNICALLJava_cn_itcast_ndkcallback_DemoActivity_callMethod2
(JNIEnv * env , jobject obj) {
//获取字节码
jclass jclazz =
(*env)->FindClass(env,"cn/itcast/ndkcallback/DataProvider");
// jmethodID (*GetStaticMethodID)(JNIEnv*, jclass, const char*, const char*);
//如果一个java方法是 静态的 就必须通过 GetStaticMethodID
//获取方法的id
jmethodIDjvoidmethod =
(*env)->GetMethodID(env,jclazz,"helloFromJava","()V");
//必须在这个地方 创建出来 dataprovider的对象
// jobject (*AllocObject)(JNIEnv*, jclass);
//创建java中dataprovider类的对象
jobject dpobj =(*env)->AllocObject(env,jclazz);
//调用方法:
(*env)->CallVoidMethod(env,dpobj,jvoidmethod);
}
②、调用java中Add(int x,int y)方法:
JNIEXPORT void JNICALLJava_cn_itcast_ndkcallback_DemoActivity_callMethod3
(JNIEnv * env , jobject obj) {
jclass jclazz =
(*env)->FindClass(env,"cn/itcast/ndkcallback/DataProvider");
jmethodID jintmethod =(*env)->GetMethodID(env,jclazz,"Add","(II)I");
jobject dpobj =(*env)->AllocObject(env,jclazz);
// jint (*CallIntMethod)(JNIEnv*, jobject, jmethodID, ...);
//调用带有int类型返回值的方法:
intresult =(*env)->CallIntMethod(env,dpobj,jintmethod,3,5);
LOGI("c resutl=%d",result);
}
③、调用java中printString(Strings)方法:
JNIEXPORT void JNICALLJava_cn_itcast_ndkcallback_DemoActivity_callMethod4
(JNIEnv * env , jobject obj) {
jclass jclazz =
(*env)->FindClass(env,"cn/itcast/ndkcallback/DataProvider");
jmethodID jvoidmethod =
(*env)->GetMethodID(env,jclazz,"printString","(Ljava/lang/String;)V");
jobject dpobj =(*env)->AllocObject(env,jclazz);
(*env)->CallVoidMethod(env,dpobj,jvoidmethod,(*env)->NewStringUTF(env,"haha from c"));
}
十三 c代码调用java中的静态方法:
1、在类中定义一个静态方法:
public class DataProvider {
//静态方法
public static void hellofromstatic(){
System.out.println("我是静态方法");
}
}
2、c代码:
//obj 代表的是调用这个c代码的java对象
JNIEXPORT void JNICALLJava_cn_itcast_ndkcallback_DemoActivity_callMethod2
(JNIEnv * env , jobject obj) {
//获取类字节码
jclass jclazz =
(*env)->FindClass(env,"cn/itcast/ndkcallback/DataProvider");
// jmethodID (*GetStaticMethodID)(JNIEnv*, jclass, const char*, const char*);
//如果一个java方法是 静态的 就必须通过 GetStaticMethodID
//获取静态方法id 使用GetStaticMethodID方法
jmethodID jvoidmethod =
(*env)->GetStaticMethodID(env,jclazz,"hellofromstatic","()V");
/// void (*CallStaticVoidMethod)(JNIEnv*,jclass, jmethodID, ...);
//执行静态方法
(*env)->CallStaticVoidMethod(env,jclazz,jvoidmethod);
}