IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

JAVA / JNI - convertir HashMap une hashmap en std::map


Sujet :

Entrée/Sortie Java

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 190
    Points : 182
    Points
    182
    Par défaut JAVA / JNI - convertir HashMap une hashmap en std::map
    Bonjour,

    je tourne un peu en rond sur un soucis.

    Je passe une map<String,String> param de type java hashmap au jni, je stocke des parameter typeid,jvalue et je souhaite la convertir en std::map pour la mettre dans un message
    de cette façon, je n'ai pas besoin de spécifier le type de parameter et sa valeur.

    j'ai vu beaucoup d'exemple pour écrire dans une map du jni vers le java mais pas l'inverse. c'est alimenter en externe par l'utilisateur en java.

    Surtout que j'ai besoin de faire une itération sur la map avec un for soit par un index élément, soit par sa clé selon sa liste de clé. j'ai vu un truc mais c'est complexe. je cherche quelque de plus simple sans avoir à appeler toutes les méthodes
    qu'on doit faire en java.

    Si je pouvais bloucler sur le numéro d'élement en fonction de la taille avec un count sans passer par la clé, ca aurait été simple, mais je n'ai vu ca que sur les liste. pas sur les map.

    J'ai rien vu de simple pour faire l'inverse ce qui est fait ci dessous. lire hashmap en arguement de la méthode JNI et écrire dans une std::map via une fonction c++ ou un tableau;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    jclass hashMapClass= env->FindClass(env, "java/util/HashMap");
    jmethodID hashMapInit = env->GetMethodID(env, hashMapClass, "<init>", "(I)V");
    jobject hashMapObj = env->NewObject(env, hashMapClass, hashMapInit, mMap.size());
    jmethodID hashMapOut = env->GetMethodID(env, hashMapClass, "put",
                "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
     
    for (auto it : mMap)
    {
        env->CallObjectMethod(env, hashMap, put,
             env->NewStringUTF(it->first.c_str()),
             env->NewStringUTF(it->second.c_str()));
    }
    Merci pour vos infos ou vos liens

    cdt
    JP

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 190
    Points : 182
    Points
    182
    Par défaut
    J'ai trouvé une solution simple plus ou moins satisfaisante, j'aurais préféré un tableau array 2D, mais en attendant mieux

    java:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
                       String[]params={
                                    "clientId","123456",
                                    "status","OK",
                                     "token",token}
                                    ;
     
                           api.createWithParams(  params);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     jni.java
        static native protected void createWithParams( Object[] params );
    jni
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void Java_test_createWithParams( JNIEnv *, jobject that,   jobjectArray );
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    extern "C" void Java_test_createWithParams(
    		JNIEnv *env, jobject that, jobjectArray params) {
     
             ... snip
     
    	if (params != nullptr) {
     
    			int nElementKeyAndValue = env->GetArrayLength(params);
    			std::map<std::string, std::string> appData;
     
     
    			// loop field key,value into string[] params
     
    			for (int count = 0; count < nElementKeyAndValue; count++) {
     
    				jstring jParamKey = (jstring)(env->GetObjectArrayElement(params, count));
     
    				const char *paramKeyStr = env->GetStringUTFChars(jParamKey, JNI_FALSE);
    				std::string key = std::string(paramKeyStr);
     
    				count++;
    				jstring jParamValue = (jstring)(env->GetObjectArrayElement(params, count));
     
    				const char *paramValueStr= env->GetStringUTFChars(jParamValue, JNI_FALSE);
    				std::string value = std::string(paramValueStr);
     
     
    				appData.insert(std::pair<std::string,std::string>(key,value) );
     
                                 ... snip
               }
     
     
             ... snip
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. JNI: comment utiliser une hashmap
    Par loicounet dans le forum Entrée/Sortie
    Réponses: 0
    Dernier message: 29/06/2010, 16h41
  2. affichage d'une hashmap de hashmap
    Par tomy29 dans le forum Struts 1
    Réponses: 2
    Dernier message: 18/07/2008, 11h26
  3. Parcours d'une HashMap (java)
    Par basket10 dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 28/03/2007, 16h06
  4. [STRUTS] Itérer sur une HashMap
    Par s.grenet dans le forum Struts 1
    Réponses: 5
    Dernier message: 06/04/2005, 13h26
  5. [débutant] cherche a copier une HashMap
    Par mathieublanc13 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 09/05/2004, 14h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo