JNI конвертирует jstring в char * - PullRequest
105 голосов
/ 15 ноября 2010

Я передал строку URL из Java в код C как jstring тип данных с помощью JNI. И мой библиотечный метод нуждается в char * в качестве URL.

Как конвертировать jstring в char *?

P.S .: Есть ли преимущество использования jcharArray в C? (т.е. передача char [] вместо строки в нативном методе)

Ответы [ 2 ]

213 голосов
/ 15 ноября 2010

Вот пара полезных ссылок, которые я нашел, когда начал работать с JNI

http://en.wikipedia.org/wiki/Java_Native_Interface
http://download.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html

относительно вашей проблемы вы можете использовать это

JNIEXPORT void JNICALL Java_ClassName_MethodName(JNIEnv *env, jobject obj, jstring javaString)   
{
   const char *nativeString = (*env)->GetStringUTFChars(env, javaString, 0);

   // use your string

   (*env)->ReleaseStringUTFChars(env, javaString, nativeString);
}
46 голосов
/ 17 апреля 2014

Спасибо, прежде всего ответ Джейсона Роджерса.

В Android && cpp должно быть так:

const char *nativeString = env->GetStringUTFChars(javaString, nullptr);

// use your string

env->ReleaseStringUTFChars(javaString, nativeString);

Может исправить эту ошибку:

1.error: базовый операнд '->' имеет тип без указателя 'JNIEnv {aka _JNIEnv}'

2.error: нет соответствующей функции для вызова _JNIEnv :: GetStringUTFChars (JNIEnv * &, _jstring * &, bool) '

3. Ошибка: нет соответствующей функции для вызова' _JNIEnv :: ReleaseStringUTFChars (JNIEnv * &, _jstring * &, char const * &) '

4.add "env-> DeleteLocalRef (nativeString);"в конце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...