您的位置:首页 > 移动开发 > Android开发

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

2014-06-09 17:38 375 查看


on_jniload


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

分类: Android C++ JNI2012-02-29
15:28 1688人阅读 评论(3) 收藏 举报

jnijavaandroidclassstringnull

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

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

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

先看下构造函数:

[java] view
plaincopy

public class Student {

private String name;

private int number;

Student(int num, String string){

name = string;

number = num;

}

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

[java] view
plaincopy

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中是如何做的:

[cpp] view
plaincopy

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查看打印出来的消息。
/article/1358971.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: