diff options
Diffstat (limited to 'platform/android/src/gson/json_array.cpp')
-rw-r--r-- | platform/android/src/gson/json_array.cpp | 29 |
1 files changed, 12 insertions, 17 deletions
diff --git a/platform/android/src/gson/json_array.cpp b/platform/android/src/gson/json_array.cpp index e8852d77e9..8ffa658b76 100644 --- a/platform/android/src/gson/json_array.cpp +++ b/platform/android/src/gson/json_array.cpp @@ -1,32 +1,31 @@ #include "json_array.hpp" - #include "json_element.hpp" namespace mbgl { namespace android { namespace gson { -jni::Object<JsonArray> JsonArray::New(jni::JNIEnv& env, const std::vector<mapbox::geometry::value>& values){ - static auto constructor = JsonArray::javaClass.GetConstructor(env); - static auto addMethod = JsonArray::javaClass.GetMethod<void (jni::Object<JsonElement>)>(env, "add"); +jni::Local<jni::Object<JsonArray>> JsonArray::New(jni::JNIEnv& env, const std::vector<mbgl::Value>& values){ + static auto& javaClass = jni::Class<JsonArray>::Singleton(env); + static auto constructor = javaClass.GetConstructor(env); + static auto addMethod = javaClass.GetMethod<void (jni::Object<JsonElement>)>(env, "add"); - auto jsonArray = JsonArray::javaClass.New(env, constructor); + auto jsonArray = javaClass.New(env, constructor); for (const auto &v : values) { - auto jsonElement = JsonElement::New(env, v); - jsonArray.Call(env, addMethod, jsonElement); - jni::DeleteLocalRef(env, jsonElement); + jsonArray.Call(env, addMethod, JsonElement::New(env, v)); } return jsonArray; } -std::vector<mapbox::geometry::value> JsonArray::convert(jni::JNIEnv& env, const jni::Object<JsonArray> jsonArray) { - std::vector<mapbox::geometry::value> values; +std::vector<mbgl::Value> JsonArray::convert(jni::JNIEnv& env, const jni::Object<JsonArray>& jsonArray) { + std::vector<mbgl::Value> values; if (jsonArray) { - static auto getMethod = JsonArray::javaClass.GetMethod<jni::Object<JsonElement> (jni::jint)>(env, "get"); - static auto sizeMethod = JsonArray::javaClass.GetMethod<jni::jint ()>(env, "size"); + static auto& javaClass = jni::Class<JsonArray>::Singleton(env); + static auto getMethod = javaClass.GetMethod<jni::Object<JsonElement> (jni::jint)>(env, "get"); + static auto sizeMethod = javaClass.GetMethod<jni::jint ()>(env, "size"); int size = jsonArray.Call(env, sizeMethod); values.reserve(uint(size)); @@ -36,7 +35,6 @@ std::vector<mapbox::geometry::value> JsonArray::convert(jni::JNIEnv& env, const if (entry) { values.push_back(JsonElement::convert(env, entry)); } - jni::DeleteLocalRef(env, entry); } } @@ -44,12 +42,9 @@ std::vector<mapbox::geometry::value> JsonArray::convert(jni::JNIEnv& env, const } void JsonArray::registerNative(jni::JNIEnv& env) { - // Lookup the class - javaClass = *jni::Class<JsonArray>::Find(env).NewGlobalRef(env).release(); + jni::Class<JsonArray>::Singleton(env); } -jni::Class<JsonArray> JsonArray::javaClass; - } // namespace gson } // namespace android } // namespace mbgl
\ No newline at end of file |