#include "json_array.hpp" #include "json_element.hpp" namespace mbgl { namespace android { namespace gson { jni::Object JsonArray::New(jni::JNIEnv& env, const std::vector& values){ static auto javaClass = jni::Class::Singleton(env); static auto constructor = javaClass.GetConstructor(env); static auto addMethod = javaClass.GetMethod)>(env, "add"); auto jsonArray = javaClass.New(env, constructor); for (const auto &v : values) { jsonArray.Call(env, addMethod, *jni::SeizeLocal(env, JsonElement::New(env, v))); } return jsonArray; } std::vector JsonArray::convert(jni::JNIEnv& env, const jni::Object jsonArray) { std::vector values; if (jsonArray) { static auto javaClass = jni::Class::Singleton(env); static auto getMethod = javaClass.GetMethod (jni::jint)>(env, "get"); static auto sizeMethod = javaClass.GetMethod(env, "size"); int size = jsonArray.Call(env, sizeMethod); values.reserve(uint(size)); for (int i = 0; i < size; i++) { auto entry = jni::SeizeLocal(env, jsonArray.Call(env, getMethod, i)); if (*entry) { values.push_back(JsonElement::convert(env, *entry)); } } } return values; } void JsonArray::registerNative(jni::JNIEnv& env) { jni::Class::Singleton(env); } } // namespace gson } // namespace android } // namespace mbgl