亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將 int 放入 HashMap jni 中?

如何將 int 放入 HashMap jni 中?

元芳怎么了 2023-05-17 15:59:47
我有這樣的方法jobject Profiling::getFullStatistic(JNIEnv *env){    env->PushLocalFrame(256); // fix for local references    jclass mapClass = env->FindClass("java/util/HashMap");    if (mapClass == nullptr)    {        return nullptr;    }    jmethodID init = env->GetMethodID(mapClass, "<init>", "(I)V");    jobject hashMap = env->NewObject(mapClass, init, m_values.size());    jmethodID put = env->GetMethodID(mapClass, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");    for (auto &it: m_values)    {        env->CallObjectMethod(hashMap, put, env->NewStringUTF(it.first.c_str()), env->NewStringUTF(std::to_string(it.second).c_str()));    }    return env->PopLocalFrame(hashMap);}最后我得到了Map<String, String>,現在我想將此 Map 類型更改為Map<String, Integer>所以,我只是將方法的簽名更改put為此jmethodID put = env->GetMethodID(mapClass, "put", "(Ljava/lang/Object;I;)Ljava/lang/Object;");據我所知int簽名是I...而且我也改變了這一行env->CallObjectMethod(hashMap, put, env->NewStringUTF(it.first.c_str()), it.second);但是知道我有這樣的錯誤JNI DETECTED ERROR IN APPLICATION: JNI NewStringUTF called with pending exception java.lang.NoSuchMethodError: no non-static method "Ljava/util/HashMap;.put(Ljava/lang/Object;I;)Ljava/lang/Object;"at java.util.Map com..ar.JniInterface.getProfilingStatistic(long) (JniInterface.java:-2)at void com..ar.ui.fragments.ar.ArScreen.lambda$testDeleteIt$1$ArScreen() (ArScreen.java:156)at void com..ar.ui.fragments.ar.-$$Lambda$ArScreen$zqdXNYFzVzmF_ZYFKJRM26bZzUw.run() (lambda:-1)at void android.os.Handler.handleCallback(android.os.Message) (Handler.java:873)at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:99)at void android.os.Looper.loop() (Looper.java:214)at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6990)at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() 
查看完整描述

1 回答

?
梵蒂岡之花

TA貢獻1900條經驗 獲得超5個贊

從 C++調用Integer#valueOf(int)并將結果傳遞給HashMap#put(Object, Object):


jclass j_Integer = env->FindClass("java/lang/Integer");

jmethodID j_Integer_valueOf = env->GetStaticMethodID(j_Integer, "valueOf", "(I)Ljava/lang/Integer;");

jmethodID put = env->GetMethodID(mapClass, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");


for (auto &it: m_values) {

    jobject j_intValue = env->CallStaticObjectMethod(j_Integer, j_Integer_valueOf, it.second);

    env->CallObjectMethod(hashMap, put, env->NewStringUTF(it.first.c_str()), j_intValue);

}


查看完整回答
反對 回復 2023-05-17
  • 1 回答
  • 0 關注
  • 167 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號