summaryrefslogtreecommitdiff
path: root/platform/android/src/gson/json_object.cpp
diff options
context:
space:
mode:
authorTobrun <tobrun@mapbox.com>2018-04-10 11:09:42 +0200
committerGitHub <noreply@github.com>2018-04-10 11:09:42 +0200
commit44ce5ab08792df5f38560016ed3d41712e8025d0 (patch)
tree83ff99ff7b811e4f54165058df01eb101750c33e /platform/android/src/gson/json_object.cpp
parent351ac83c75955c7e44e49a42156ece83b759612b (diff)
downloadqtlocation-mapboxgl-44ce5ab08792df5f38560016ed3d41712e8025d0.tar.gz
Rework expression conversion (#11490)
* [android] - rework expression conversion
Diffstat (limited to 'platform/android/src/gson/json_object.cpp')
-rw-r--r--platform/android/src/gson/json_object.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/platform/android/src/gson/json_object.cpp b/platform/android/src/gson/json_object.cpp
index a704dae9dd..61b55f8b9e 100644
--- a/platform/android/src/gson/json_object.cpp
+++ b/platform/android/src/gson/json_object.cpp
@@ -9,6 +9,23 @@ namespace android {
namespace gson {
+jni::Object<JsonObject> JsonObject::New(jni::JNIEnv& env, const std::unordered_map<std::string, mapbox::geometry::value>& values) {
+ static auto constructor = JsonObject::javaClass.GetConstructor(env);
+ static auto addMethod = JsonObject::javaClass.GetMethod<void (jni::String, jni::Object<JsonElement>)>(env, "add");
+
+ jni::Object<JsonObject> jsonObject = JsonObject::javaClass.New(env, constructor);
+
+ for (auto &item : values) {
+ jni::Object<JsonElement> jsonElement = JsonElement::New(env, item.second);
+ jni::String key = jni::Make<jni::String>(env, item.first);
+ jsonObject.Call(env, addMethod, key, jsonElement);
+ jni::DeleteLocalRef(env, jsonElement);
+ jni::DeleteLocalRef(env, key);
+ }
+
+ return jsonObject;
+}
+
template <typename F> // void (jni::String, jni::Object<gson::JsonElement>)
static void iterateEntrySet(jni::JNIEnv& env, jni::Object<JsonObject> jsonObject, F callback) {
// Get Set<Map.Entry<String, JsonElement>>