jni傳遞對象中包含arraylist對象。


相信在使用jni的過程中,總是要傳遞各種各樣的類型,在這其中,我也碰到了一些問題。

簡單的傳一些內容,相信在網上一搜一大把。

所以我們就來說說。傳遞對象中包含arraylist吧。

在這里先給大家一個連接,顯示一些jni的傳遞:http://blog.csdn.NET/u_xtian/article/details/6033963

所以,我們定義一些Java中的類

user.java

public class User{  

     private long id;

    private boolean isMan;

}

name.java

public class People{

      private int id;

    private  ArrayList<User>  myuser;

}

public class Hello{

     static{

             System.loadLibrary("user");

}


public native  void  SetUser(People people);

}


C語言中:

#include<jni.h>

JNIEXPORT void JNICALL Java_Hello_SetUser(JNIEnv*,  jobject jthiz, jobject people);

JNIEXPORT void JNICALL Java_HelloJni_setUserList  (JNIEnv *env, jobject jthiz, jobject people)

{

    jclass peo_cls = env->GetObjectClass(people);

                if(peo_cls == NULL)
                {
                  return ;
                }

                jfieldID idFieldID = env->GetFieldID(peo_cls,"id","I"); //獲得得People類的屬性id
                jint id= env->GetIntField(people, idFieldID );  //獲得屬性值

                jfieldID codeFieldID = env->GetFieldID(peo_cls,"myuser","Ljava/util/ArrayList;");

                jobject codeobj = env->GetObjectField(people, codeFieldID);

                if(codeobj == NULL)
                {
                    return  ;
                }

                int i;
                jclass cls_arraylist = env->GetObjectClass(codeobj);
                //method in class ArrayList
                jmethodID arraylist_get = env->GetMethodID(cls_arraylist,"get","(I)Ljava/lang/Object;");
                jmethodID arraylist_size = env->GetMethodID(cls_arraylist,"size","()I");
                jint len = env->CallIntMethod(codeobj,arraylist_size);
                for(i=0;i<len;i++){
                    jobject obj_user = env->CallObjectMethod(codeobj,arraylist_get,i);
                    jclass cls_user = env->GetObjectClass(obj_user);

       
                    jfieldID idFieldID = env->GetFieldID(cls_user,"id","J"); // 獲得屬性ID
                    jfieldID isManFieldID = env->GetFieldID(cls_user,"isMan","Z"); // 獲得屬性ID

                    jint id= env->GetIntField(obj_user , idFieldID );//獲得屬性值
                    jboolean isMan= env->GetBooleanField(obj_user ,isManFieldID );//獲得屬性值

}

這樣就完成了。在對象object中包含有arraylist的對象。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM