gpt4 book ai didi

java - 如何通过 JNI 创建 HashMap 然后解析为 java

转载 作者:太空狗 更新时间:2023-10-29 16:27:23 24 4
gpt4 key购买 nike

您好,我想通过 Ndk 保护我的网址和应用 key ,我想在应用中创建 hashmap 并静态存储 key 值,然后解析为 java,我遵循 StackoverflowCreate HashMap 这样的回答还有JNI passing objects from C++ to Java从上面的链接中弃用了一些方法并且没有找到任何方法来执行此操作,我创建了 HashMap 但它给了我错误

#include <jni.h>
extern "C"
JNIEXPORT jobject
Java_com_company_project_home_ui_MainActivity_getUrlMap(
JNIEnv *env,
jobject /* this */) {
jclass mapClass = env->FindClass("java/util/HashMap");
if(mapClass == NULL)
{
return NULL;
}
jsize map_len = 1;
jmethodID init = env->GetMethodID(mapClass, "<init>", "(I)V");
jobject hashMap = env->NewObject(mapClass, init, map_len);
jmethodID put = env->GetMethodID(mapClass, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
char *key = (char*)"URL_TEST_API" ;
char *val = (char*)"home.php";
env->CallObjectMethod(hashMap, put, key, val);
return hashMap;
}

错误

A/art: art/runtime/java_vm_ext.cc:410]   native: #12 pc 00dd8f2f  /data/app/com.company.project-1/oat/arm/base.odex (void com.company.project.home.ui.MainActivity.onCreate(android.os.Bundle)+714)

最佳答案

我解决了我的问题,我在代码中发现的主要问题是我错过了在 JNIEXPORT 行之后添加 JNICALL ,并且因为 Key 和 val 无效所以我改变了正如@Michael 在上面的回答中提到的通过 C 转换为 Java String,现在代码在一些修改后工作正常也改变了 ()

    #include <jni.h>
extern "C"
JNIEXPORT jobject
JNICALL
Java_com_company_project_somePackage_SplashScreen_getHashMap(JNIEnv *env, jobject /* this */) {
jclass mapClass = env->FindClass("java/util/HashMap");
if(mapClass == NULL)
{
return NULL;
}
jsize map_len = 1;
jmethodID init = env->GetMethodID(mapClass, "<init>", "(I)V");
jobject hashMap = env->NewObject(mapClass, init, map_len);
jmethodID put = env->GetMethodID(mapClass, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
jenv->CallObjectMethod(hashMap, put, env->NewStringUTF("URL_TEST_API"), env->NewStringUTF("home.php"));
return hashMap;
}

关于java - 如何通过 JNI 创建 HashMap<String, String> 然后解析为 java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47224571/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com