Chris@7
|
1
|
Chris@7
|
2 #include "getset.h"
|
Chris@7
|
3
|
Chris@7
|
4 #include <iostream>
|
Chris@7
|
5
|
Chris@7
|
6 void
|
Chris@7
|
7 setStringField(JNIEnv *env, jobject obj, std::string name, std::string value)
|
Chris@7
|
8 {
|
Chris@7
|
9 jclass cls = env->GetObjectClass(obj);
|
Chris@7
|
10 env->SetObjectField(obj,
|
Chris@7
|
11 env->GetFieldID(cls, name.c_str(), "Ljava/lang/String;"),
|
Chris@7
|
12 env->NewStringUTF(value.c_str()));
|
Chris@7
|
13 }
|
Chris@7
|
14
|
Chris@7
|
15 void
|
Chris@7
|
16 setFloatField(JNIEnv *env, jobject obj, std::string name, float value)
|
Chris@7
|
17 {
|
Chris@7
|
18 jclass cls = env->GetObjectClass(obj);
|
Chris@7
|
19 env->SetFloatField(obj,
|
Chris@7
|
20 env->GetFieldID(cls, name.c_str(), "F"),
|
Chris@7
|
21 value);
|
Chris@7
|
22 }
|
Chris@7
|
23
|
Chris@7
|
24 void
|
Chris@7
|
25 setBooleanField(JNIEnv *env, jobject obj, std::string name, bool value)
|
Chris@7
|
26 {
|
Chris@7
|
27 jclass cls = env->GetObjectClass(obj);
|
Chris@7
|
28 env->SetBooleanField(obj,
|
Chris@7
|
29 env->GetFieldID(cls, name.c_str(), "Z"),
|
Chris@7
|
30 value);
|
Chris@7
|
31 }
|
Chris@7
|
32
|
Chris@7
|
33 void
|
Chris@7
|
34 setIntField(JNIEnv *env, jobject obj, std::string name, int value)
|
Chris@7
|
35 {
|
Chris@7
|
36 jclass cls = env->GetObjectClass(obj);
|
Chris@7
|
37 env->SetIntField(obj,
|
Chris@7
|
38 env->GetFieldID(cls, name.c_str(), "I"),
|
Chris@7
|
39 value);
|
Chris@7
|
40 }
|
Chris@7
|
41
|
Chris@7
|
42 void
|
Chris@7
|
43 setObjectField(JNIEnv *env, jobject obj, std::string name, std::string type, jobject value)
|
Chris@7
|
44 {
|
Chris@7
|
45 jclass cls = env->GetObjectClass(obj);
|
Chris@7
|
46 jfieldID field = env->GetFieldID(cls, name.c_str(), type.c_str());
|
Chris@7
|
47 std::cerr << "setObjectField: class = " << cls << ", object = " << obj << ", field = " << field << ", value = " << value << std::endl;
|
Chris@7
|
48 env->SetObjectField(obj, field, value);
|
Chris@7
|
49 }
|
Chris@7
|
50
|
Chris@7
|
51 void
|
Chris@7
|
52 setStringArrayField(JNIEnv *env, jobject obj, std::string name, std::vector<std::string> values)
|
Chris@7
|
53 {
|
Chris@7
|
54 jclass strCls = env->FindClass("java/lang/String");
|
Chris@7
|
55 jobjectArray jarr = env->NewObjectArray(values.size(), strCls, 0);
|
Chris@7
|
56 for (int i = 0; i < values.size(); ++i) {
|
Chris@7
|
57 env->SetObjectArrayElement(jarr, i, env->NewStringUTF(values[i].c_str()));
|
Chris@7
|
58 }
|
Chris@7
|
59 setObjectField(env, obj, name, "[Ljava/lang/String;", jarr);
|
Chris@7
|
60 }
|
Chris@7
|
61
|
Chris@7
|
62 jmethodID
|
Chris@7
|
63 getEnumValueOfMethod(JNIEnv *env)
|
Chris@7
|
64 {
|
Chris@7
|
65 jclass enumClass = env->FindClass("java/lang/Enum");
|
Chris@7
|
66
|
Chris@7
|
67 // Enum.valueOf(Class, String) returns Enum
|
Chris@7
|
68 jmethodID valueOfMethod = env->GetStaticMethodID
|
Chris@7
|
69 (enumClass, "valueOf",
|
Chris@7
|
70 "(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum;");
|
Chris@7
|
71
|
Chris@7
|
72 return valueOfMethod;
|
Chris@7
|
73 }
|
Chris@7
|
74
|