Как можно вернуть из JNI vector<vector<float>>?

71
17 января 2021, 00:50

У меня есть вот такая C++ имплементация

std::vector<std::vector<float>> const &GetVertices() { return m_Vertices; }

Мне нужно вернуть этот вектор в Java через JNI

Из за того, что это vector из vector-ов я думаю, что я должен использовать тут jobjectArray

вот так

extern "C" JNIEXPORT jobjectArray JNICALL
Java_com_google_ar_core_examples_
java_helloar_HelloArActivity_fillListWithData(
JNIEnv *env,
jobject /* this */
) 

и в Java это выглядит вот так

public native Object[] fillListWithData();

Вопрос - как конвертировать vector<vector<float>> в jobjectArray?

Есть у JNI метод который может создать jobjectArray

И как потом наполнить этот array?

Вот так сейчас выглядит имплементация моего JNI метода

extern "C" JNIEXPORT jobjectArray JNICALL
Java_com_google_ar_core_examples_java_
helloar_HelloArActivity_fillListWithData(
JNIEnv *env,
jobject /* this */
) {
//verticesVec
vector<vector<float>> verticesVec = initializer->GetVertices(); // THIS 
VECTOR I NEED TO CONVERT TO JOBJECTARRAY
jobjectArray verticesArr = env->NewObjectArray(verticesVec.size(), WHAT 
CLASS SHOULD BE HERE?,NULL);
//HOW TO FILL THE ARRAY HERE??
return verticesArr;
}
Answer 1

Создайте float array.

using namespace std;
vector<vector<float>> verticesVec = initializer->GetVertices();
jclass floatArray = env->FindClass("[F");
if (!floatArray) {
    return nullptr;
}
jobjectArray verticesArr = env->NewObjectArray(verticesVec.size(), floatArray, nullptr);
for (size_t i = 0; i < verticesVec.size(); i++) {
    const vector<float>& vec = verticesVec[i];
    jfloatArray element = env->NewFloatArray(vec.size());
    if (!element) {
        break;
    }
    env->SetFloatArrayRegion(element, 0, vec.size(), vec.data());
    env->SetObjectArrayElement(verticesArr, i, element);
}
return verticesArr;
READ ALSO
Не работает jquery в Visual Studio 2017

Не работает jquery в Visual Studio 2017

Есть проект aspnet core 2

121
&lt;div&gt; или стандарт?

<div> или стандарт?

Недавно начал изучать HTML и уже 3 сайта написал (списывал проекты с ютуба и разбирал код)Везде видел <div> <div> вместо <header> <footer> и тд

130
Как сверстать блок с линиями отходящими от центральной картинки?

Как сверстать блок с линиями отходящими от центральной картинки?

Возможно, кто-то сталкивался с подобными блоками?

120
Как исправить проблему в плагине jQuery Сhosen?

Как исправить проблему в плагине jQuery Сhosen?

Ребят, помогите пожалуйста решить проблему с плагином Сhosen последней версииРешил переделать плагина под себя, в плане дизайна

96