JNI jobject 与 map互转
来源:互联网 发布:python 解释器 开源 编辑:程序博客网 时间:2024/05/23 11:57
//从c语言的map转java hashmap
jobject JavaHelper::cmap2jhashmap(std::map<char*,char*> cmap){
JNIEnv* env = JNU_GetEnv();jclass jmapclass = env->FindClass("java/util/HashMap");
jmethodID mid = env->GetMethodID(jmapclass, "<init>", "()V");
jmethodID putmethod = env->GetMethodID(jmapclass, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
jobject jmap = env->NewObject(jmapclass,mid);
jclass strClass = env->FindClass("java/lang/String");
jmethodID ctorID = env->GetMethodID(strClass, "<init>", "([BLjava/lang/String;)V");
jstring encoding = env->NewStringUTF("utf-8");
std::map<char*,char*>::iterator it;
for(it=cmap.begin();it != cmap.end();it++)
{
char* key=it->first;
jbyteArray keybytes = env->NewByteArray(strlen(key));
env->SetByteArrayRegion(keybytes, 0, strlen(key), (jbyte*)key);
jstring jkey = (jstring)env->NewObject(strClass, ctorID, keybytes, encoding);
char* value =it->second;
jbyteArray valuebytes = env->NewByteArray(strlen(value));
env->SetByteArrayRegion(valuebytes, 0, strlen(value), (jbyte*)value);
jstring jvalue = (jstring)env->NewObject(strClass, ctorID, valuebytes, encoding);
env->CallVoidMethod(jmap,putmethod,jkey,jvalue);
}
return jmap;
}
//java hashmap转c map
std::map<char*,char*> JavaHelper::jmap2cmap(jobject jobj){
std::map<char*,char*> cmap;
JNIEnv* env = JNU_GetEnv();
jclass jmapclass = env->FindClass("java/util/HashMap");
jmethodID jkeysetmid = env->GetMethodID(jmapclass, "keySet", "()Ljava/util/Set;");
jmethodID jgetmid = env->GetMethodID(jmapclass, "get", "(Ljava/lang/Object;)Ljava/lang/Object;");
jobject jsetkey = env->CallObjectMethod(jobj,jkeysetmid);
jclass jsetclass = env->FindClass("java/util/Set");
jmethodID jtoArraymid = env->GetMethodID(jsetclass, "toArray", "()[Ljava/lang/Object;");
jobjectArray jobjArray = (jobjectArray)env->CallObjectMethod(jsetkey,jtoArraymid);
if(jobjArray==NULL){
LOGD("param is NULL");
}
jsize arraysize = env->GetArrayLength(jobjArray);
int i=0;
for( i=0; i < arraysize; i++ ){
jstring jkey = (jstring)env->GetObjectArrayElement(jobjArray, i );
jstring jvalue = (jstring)env->CallObjectMethod(jobj,jgetmid,jkey);
char* key = (char*)env->GetStringUTFChars(jkey,0);
char* value = (char*)env->GetStringUTFChars(jvalue,0);
cmap[key]=value;
}
return cmap;
}
1 0
- JNI jobject 与 map互转
- jni-jobject操作对象
- jni invalid jobject
- 小谈jni jobject jclass
- JNI参数jobject和jclass
- JNI笔记 Jclass Jobject JNI数据类型
- jni的JNIEnv指针和jobject指针
- jni的JNIEnv指针和jobject指针
- JNI中的jclass和jobject的区别
- 转载:JNI中的jclass和jobject
- CMD编译JNI头文件方法 jobject/jclass 参数
- Java中JNI:JNIEnv类型和jobject类型的解释
- C# JArray与JObject 的使用
- Java中JNI的使用详解第二篇:JNIEnv类型和jobject类型的解释
- Java中JNI的使用详解第二篇:JNIEnv类型和jobject类型的解释
- Java中JNI的使用详解第二篇:JNIEnv类型和jobject类型的解释
- JNI的使用详解第二篇:JNIEnv类型和jobject类型
- Java中JNI的使用详解第二篇:JNIEnv类型和jobject类型的解释
- c实现任给两日期计算相隔天数问题
- Overload & Override 之我见
- Chromium的启动流程
- 辞职后的随笔
- 使用Redis的5个注意事项
- JNI jobject 与 map互转
- What Is The Meaning of 0.0.0.0 In Routing Table?
- String s=new String("abc")创建了几个对象?
- Qt之线程和QObject
- 矩阵、二维数组
- eclipse启动tomcat, http://localhost:8080无法访问
- 【JS】undefined是变量的初始值
- emmet简单使用教程
- Java类加载器