I have passed a hashmap from java to C. Now, I need to fill the hashmap and pass it back to java. This is my java code.
Main.java
import java.util.*;
public class Main {
static {
System.loadLibrary("Tests"); }
public void doProcess() {
Container container = new Container();
container.getParameterMap().put("foo","bar");
service(container);
}
public native void service(Container container);
public static void main(String args[])
{
<pre>System.out.println("Service Names");
HashMap<String,String>[] h = new HashMap().service();
for(int i=0;;i++)
{
System.out.print(h+"\n");
}
}
}
Container.java
import java.util.HashMap;
import java.util.Map;
public class Container {
private String hello;
private Map<String, String> parameterMap = new HashMap<String, String>();
public Map<String, String> getParameterMap() {
return parameterMap;
}
}
Now, how can I access and fill the hashmap and pass it back to java.
What I have tried:
I have tried getting hashmap in C using the following code.
jclass c_Container = (*env)->GetObjectClass(env, jContainer);
jmethodID m_GetParameterMap = (*env)->GetMethodID(env, c_Container, "getParameterMap", "()Ljava/util/Map;");
jobject jParameterMap = (*env)->CallObjectMethod(env, jContainer, m_GetParameterMap);
jclass c_Map =(*env)->FindClass(env,"java/util/Map");
jmethodID put = (*env)->GetMethodID(env,c_Map, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
jmethodID m_GetSize = (*env)->GetMethodID(env, c_Map, "size", "()I");
int jSize = (*env)->CallIntMethod(env, jParameterMap, m_GetSize);
char* key = (char*)"*";
char* val = (char*)"";
(*env)->CallObjectMethod(jParameterMap, put, key, val);
Now, can I access the hashmap and update the data and send it back.
Is there any in-built method does hashmap have to do this?