on_jniload
之前我们介绍过在jni中调用java中的成员函数,这里我们来介绍下载jni中创建java中的类对象,其实跟之前一样就是调用java类中的构造函数。
我们在之前的例子的前提下修改一个带参数的构造函数,然后再main activety中使用native code去new一个class对象,在jni中调用构造函数传入参数去给类的成员变量赋值,最后打印出log。
-------------------------------------------------------------
先看下构造函数:
- public class Student {
- private String name;
- private int number;
- Student(int num, String string){
- name = string;
- number = num;
- }
在按下button的时候新建一个class 对象:
- public void onClick(View v) {
- if(v.getId() == R.id.button1 ){
- // accessInstanceMethod("Instance Method Call");
- // student=doWithObj(student);
- // tv.setText("name:"+student.getName()+", number:"+student.getNumber());
- Student student = createObj();
- System.out.println( "name: "+student.getName()+", number: "+student.getNumber());
- }
最后看下在jni中是如何做的:
- jobject
- Java_com_android_jni_MyJNI_createObj(JNIEnv *env,jobject jobj)
- {
- jobject student = NULL;
- jclass student_cls = (*env)->FindClass(env,
- "com/android/jni/Student");
- if(student_cls == NULL)
- return NULL; //can not find class Studnet
- jmethodID student_mtd = (*env)->GetMethodID(env,student_cls,"<init>",
- "(ILjava/lang/String;)V");
- if(student_mtd == NULL)
- return NULL;
- jstring jstr = (*env)->NewStringUTF(env,"[Jay]");
- student = (*env)->NewObject(env,student_cls,student_mtd,10,jstr);
- (*env)->DeleteLocalRef(env,jstr);
- return student;
- }
很简单,就是调用了NewObect来新建一个对象,之前需要FindClass,然后得到构造函数的methodID。
之后运行模拟器,使用logcat查看打印出来的消息。
http://blog.csdn.net/vv0_0vv/article/details/7306205