学习android JNI的那些事儿--------7. 在JNI中创建java类对象

on_jniload

学习android JNI的那些事儿--------7. 在JNI中创建java类对象

分类: Android C++ JNI   1688人阅读  评论(3)  收藏  举报
jni java android class string null

之前我们介绍过在jni中调用java中的成员函数,这里我们来介绍下载jni中创建java中的类对象,其实跟之前一样就是调用java类中的构造函数。

我们在之前的例子的前提下修改一个带参数的构造函数,然后再main activety中使用native code去new一个class对象,在jni中调用构造函数传入参数去给类的成员变量赋值,最后打印出log。

-------------------------------------------------------------

先看下构造函数:

[java]  view plain copy
  1. public class Student {  
  2.     private String name;  
  3.     private int number;  
  4.     Student(int num, String string){  
  5.         name = string;  
  6.         number = num;  
  7.     }  

在按下button的时候新建一个class 对象:

[java]  view plain copy
  1.         public void onClick(View v) {  
  2.             if(v.getId() == R.id.button1 ){  
  3. //              accessInstanceMethod("Instance Method Call");  
  4. //              student=doWithObj(student);  
  5. //              tv.setText("name:"+student.getName()+", number:"+student.getNumber());  
  6.                 Student student = createObj();  
  7.                 System.out.println( "name: "+student.getName()+", number: "+student.getNumber());  
  8.             }  

最后看下在jni中是如何做的:

[cpp]  view plain copy
  1. jobject  
  2. Java_com_android_jni_MyJNI_createObj(JNIEnv *env,jobject jobj)  
  3. {  
  4.     jobject student = NULL;  
  5.     jclass student_cls = (*env)->FindClass(env,  
  6.             "com/android/jni/Student");  
  7.     if(student_cls == NULL)  
  8.         return NULL; //can not find class Studnet  
  9.     jmethodID student_mtd = (*env)->GetMethodID(env,student_cls,"",  
  10.             "(ILjava/lang/String;)V");  
  11.     if(student_mtd == NULL)  
  12.         return NULL;  
  13.     jstring jstr = (*env)->NewStringUTF(env,"[Jay]");  
  14.     student = (*env)->NewObject(env,student_cls,student_mtd,10,jstr);  
  15.     (*env)->DeleteLocalRef(env,jstr);  
  16.     return student;  
  17. }  

很简单,就是调用了NewObect来新建一个对象,之前需要FindClass,然后得到构造函数的methodID。

之后运行模拟器,使用logcat查看打印出来的消息。

http://blog.csdn.net/vv0_0vv/article/details/7306205

你可能感兴趣的:(unity3d)