jni.c中
JNIEXPORT void JNICALL Java_com_peakmain_ndkproject_MainActivity_callBackShowToast
(JNIEnv *env, jobject job){
//1.得到字节码
jclass jclazz = (*env)->FindClass(env, "com/peakmain/ndkproject/MainActivity");//new出来就不是上下文
//2.得到方法
jmethodID jmethodID = (*env)->GetMethodID(env, jclazz, "showToast", "()V");
//3.实例化该类
//jobject jobject = (*env)->AllocObject(env, jclazz);
//4.调用方法
(*env)->CallVoidMethod(env, job, jmethodID);
}
MainActivity中
/**
* 让c代码调用Activity的showToast
*/
public native void callBackShowToast();
public void onClick(View view) {
//mJNI.callbackAdd();
// mJNI.helloFromJava();
//mJNI.callbackPrintString();
//mJNI.callbackSayHello();
MainActivity.this.callBackShowToast();
}
public void showToast(){
System.out.println("showToast----------------");
Toast.makeText(MainActivity.this,"showToast----------------",Toast.LENGTH_SHORT).show();
}
c调用java实际是反射实例化,更新UI的时候不能实例化因为new的对象的是没有上下文,此时虽然会打印但是会报空指针错误
网友评论