Как передать значение строки char в строку Java (JNI to Java) в параметре функции? - PullRequest
2 голосов
/ 18 апреля 2011

Привет! Я хочу передать строку символов в java из jni в java в android-ndk. предположим, это моя родная функция.

private native int myFunc(String buffer);

Это моя нативная функция в jni:

jint Java_com_example_twolibs_myFunc(JNIEnv*  env, jobject  thiz, jstring buffString){
    //I want to pass a character array to buffString from here, that I would read from java as String.
return 0;
}

Как это сделать?

Ответы [ 2 ]

2 голосов
/ 20 апреля 2011

Я не могу разобрать вопрос. Передача строки "java из jni в java" звучит излишне.

Если все, что вам нужно, это получить содержимое строки из собственного кода, вы можете использовать JNI GetStringUTFChars, чтобы получить представление UTF-8. Строки являются неизменяемыми и не могут быть изменены напрямую. Вы можете создать новую строку из нативного с помощью NewStringUTF.

Обратите внимание, что строковые данные, передаваемые в NewStringUTF, должны быть в форме "модифицированного UTF-8". См. Документацию JNI для объяснения того, что это значит.

Если все, что вы хотите сделать, это передать символы вокруг, вы можете вместо этого использовать буфер char [] (GetCharArrayElements, ReleaseCharArrayElements). Обратите внимание, что символы языка Java являются UTF-16, поэтому «jchar» - это 16-разрядное значение без знака (не пытайтесь рассматривать их как 8-разрядный «char» в C ++).

1 голос
/ 17 октября 2012

Взгляните на это, рассказывает, как передавать значения в ndk и как получать значения и выполнять операции в пределах ndk

http://hoodaandroid.blogspot.in/2012/07/working-with-android-ndk-native.html

...