Jyotsna Munjal
Jyotsna Munjal

Reputation: 11

Passing std::byte* through JNI to java

Tried this:

        void sendInfo(std::byte* something, long dataSize) {

    JavaVM* vm = nsCtx.javaVM;
    JNIEnv* env;
    int envState = getEnvState(&env, vm);

    if (envState == JNI_OK || envState == JNI_EDETACHED) {
        LOGD("Environment received successfully");

        jbyteArray byteArray;

        if(!byteArray)
            byteArray = env->NewByteArray(dataSize);

        if(env->GetArrayLength(byteArray) != dataSize)
        {
            env->DeleteLocalRef(byteArray);
            byteArray = env->NewByteArray(dataSize);
        }

        LOGD("byte array is created");

        void *temp = env->GetPrimitiveArrayCritical((jarray)byteArray, 0);

        LOGD("Worked fine");

        memcpy(temp, something, dataSize);
        env->ReleasePrimitiveArrayCritical(byteArray, temp, 0);

        jmethodID SendFunc = env->GetMethodID(someClass, "something",
                                               "([B)V");

        // Call the method on the object
        env->CallVoidMethod(someObject, SendFunc, byteArray);

        if (env->ExceptionCheck()) {
            env->ExceptionDescribe();
        }
        //if thread was attached to it, detach it
        if(envState == JNI_EDETACHED) {
            vm->DetachCurrentThread();
            LOGD("Thread detached");
        }
    } else {
        //Returns JNI_ERR
        LOGD("JNI ERROR occurred");
    }
}

Java function signature:

public void getbyteArrays(byte[] someArray);

but getting some DALVIk errors. Can someone explain how to pass std::byte* to Java in the form of byte[] array in the java function. I am completely new to this concept and not able to get this working.

Upvotes: 0

Views: 66

Answers (0)

Related Questions