NDK积累

来源:互联网 发布:人工智能学院首页 编辑:程序博客网 时间:2024/06/07 11:21

jni返回hashmap给 java

1.publicclassJniClient {
    publicstaticnative HashMap<String, String> setMap();
}

2.JNIEXPORT jobject JNICALL Java_com_ndk_test_JniClient_setMap(JNIEnv *env,
        jclass cls) {
    jclass class_hashmap = (*env)->FindClass(env, "java/util/HashMap");
    jmethodID hashmap_init = (*env)->GetMethodID(env, class_hashmap, "<init>",
            "()V");
    jobject HashMap = (*env)->NewObject(env, class_hashmap, hashmap_init, "");
    jmethodID HashMap_put = (*env)->GetMethodID(env, class_hashmap, "put",
            "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
    (*env)->CallObjectMethod(env, HashMap, HashMap_put, (*env)->NewStringUTF(env, "key1"), (*env)->NewStringUTF(env, "value1"));
    (*env)->CallObjectMethod(env, HashMap, HashMap_put,(*env)->NewStringUTF(env, "key2"), (*env)->NewStringUTF(env, "value2"));
    returnHashMap;
}
3.
Object object=JniClient.setMap();
HashMap<String, String>map=(HashMap<String, String>)object;
System.out.println("size:"+map.size()+";value:"+map.get("key1"));

-----------------------------------------------------------------------------------------------------------------------
返回list

/*
 * Class:     com_feixun_jni_HelloJni
 * Method:    native_getListStudents
 * Signature: ()Ljava/util/ArrayList;
 */ //获得集合类型的数组
JNIEXPORT jobject JNICALL Java_com_feixun_jni_HelloJni_native_getListStudents
  (JNIEnv * env, jobject obj)
{
    jclass list_cls = env->FindClass("Ljava/util/ArrayList;");//获得ArrayList类引用


if(listcls == NULL)
    {
cout << "listcls is null \n" ;
}
    jmethodID list_costruct = env->GetMethodID(list_cls , "<init>","()V"); //获得得构造函数Id


jobject list_obj = env->NewObject(list_cls , list_costruct); //创建一个Arraylist集合对象
    //或得Arraylist类中的 add()方法ID,其方法原型为: boolean add(Object object) ;
jmethodID list_add  = env->GetMethodID(list_cls,"add","(Ljava/lang/Object;)Z"); 
  
jclass stu_cls = env->FindClass("Lcom/feixun/jni/Student;");//获得Student类引用
//获得该类型的构造函数  函数名为 <init> 返回类型必须为 void 即 V
jmethodID stu_costruct = env->GetMethodID(stu_cls , "<init>", "(ILjava/lang/String;)V");


    for(int i = 0 ; i < 3 ; i++)
{
   jstring str = env->NewStringUTF("Native");
//通过调用该对象的构造函数来new 一个 Student实例
        jobject stu_obj = env->NewObject(stucls , stu_costruct , 10,str);  //构造一个对象
        
        env->CallBooleanMethod(list_obj , list_add , stu_obj); //执行Arraylist类实例的add方法,添加一个stu对象
}


return list_obj ;
}

0 0
原创粉丝点击