NDK积累

jni返回hashmap给 java

1.public class JniClient {
     public static native 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" ));
     return HashMap;
}
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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值