如何创建HashMap< String,String>通过JNI然后解析为Java [英] How to create HashMap<String, String> through JNI then parse to java

查看:114
本文介绍了如何创建HashMap< String,String>通过JNI然后解析为Java的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想通过Ndk保护我的Web网址和应用程序秘密密钥,我想在应用程序中创建hashmap,并且还静态存储密钥值,然后解析为Java,我遵循 Stackoverflow 的回答,例如创建HashMap JNI将对象从C ++传递到Java 某种从上面的链接中弃用的方法,但找不到任何方法,我创建了HashMap,但它给了我错误

Hi I want to secure my web url and app secret keys through Ndk, I want to create hashmap in app and also store key values statically then parse to java, I follow Stackoverflow answer like Create HashMap also JNI passing objects from C++ to Java some method deprecated from above link and didn't find any way to do this, I created HashMap but it giving me error

#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无效,所以我通过C更改为Java String(如@Michael在上面的答案中提到的那样),现在经过一些修改后代码正常工作,也更改了()

I solved My Problem the main Problem I found in my code is I missed to add JNICALL after JNIEXPORT line, and as Key and val are not valid so I changed to Java String through C as mentioned by @Michael in above answer, now code working fine after some modification also change ()

    #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;
        }

这篇关于如何创建HashMap&lt; String,String&gt;通过JNI然后解析为Java的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆