Utility method in JNI layer
suggest changeThis method will help to get the Java string from C++ string.
jstring getJavaStringFromCPPString(JNIEnv *global_env, const char* cstring) { jstring nullString = global_env->NewStringUTF(NULL); if (!cstring) { return nullString; } jclass strClass = global_env->FindClass("java/lang/String"); jmethodID ctorID = global_env->GetMethodID(strClass, "<init>", "([BLjava/lang/String;)V"); jstring encoding = global_env->NewStringUTF("UTF-8"); jbyteArray bytes = global_env->NewByteArray(strlen(cstring)); global_env->SetByteArrayRegion(bytes, 0, strlen(cstring), (jbyte*) cstring); jstring str = (jstring) global_env->NewObject(strClass, ctorID, bytes, encoding); global_env->DeleteLocalRef(strClass); global_env->DeleteLocalRef(encoding); global_env->DeleteLocalRef(bytes); return str; }
This method will help you to convert jbyteArray to char
char* as_unsigned_char_array(JNIEnv *env, jbyteArray array) { jsize length = env->GetArrayLength(array); jbyte* buffer = new jbyte[length + 1]; env->GetByteArrayRegion(array, 0, length, buffer); buffer[length] = '\0'; return (char*) buffer; }
Found a mistake? Have a question or improvement idea?
Let me know.
Table Of Contents