在 JNI 函数中将 jstring 写入 logcat
Writing jstring to logcat in JNI function
我正在尝试调试我的 JNI
函数,这样做时我希望显示 logcat
的传入 jstring
参数以验证其正确性。
我已尝试使用以下代码来执行此操作,但它总是崩溃。
LOGD(myStringArg);
其中 myStringArg
声明为 jstring
.
如果我在我的 JNI
函数中声明并定义另一个 jstring
并且 LOGD
那个,它就可以工作。但是,出于某种原因,如果我在 JNI
函数参数上调用 LOGD
它会崩溃。我已经在内部验证 jstring
不为空,并且在 Java 函数中调用它之前,我还检查了该值是否正确。
我已经将 jstring 转换为 const char * 如下:
const char *charString;
charString = (const char*)(*env)->GetStringUTFChars(env, myStringArg, NULL);
LOGD(charString);
没有任何显示,表示charString为空?
知道怎么做吗?
谢谢。
您需要将 jstring
转换为原生 char*
或 string
。例如:
// Get a pointer to an array of bytes representing the string in modified UTF-8 encoding
char *str = env->GetStringUTFChars(myStringArgs, NULL);
// Now you can log str
// Inform the VM that the native code no longer needs access to str
env->ReleaseStringUTFChars(myStringArg, str);
有关 JNI 函数的详细信息,请参阅 http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/functions.html。
您可以尝试使用此方法从 jstring 中提取字符:
const char* getCharFromString(JNIEnv* env, jstring string){
if(string == NULL)
return NULL;
return env->GetStringUTFChars(string ,0);
}
这样您就可以将 jstring
打印为 (const char*)
:
LOGD(getCharFromString(env, myStringArg));
如果打印此字符串时仍有问题,请尝试使用以下方法调试内容:
int getBytesNeededByString(JNIEnv* env, jstring string){
return env->GetStringUTFLength(string);
}
int getNumberOfCharsInString(JNIEnv* env, jstring string){
return env->GetStringLength(string);
}
你可以这样试试,
LOGD("String from java is %s\n",charString);
它对我有用。
试试这个:
__android_log_print(ANDROID_LOG_DEBUG, "LOG_TAG", "text:%s ", charString );
我正在尝试调试我的 JNI
函数,这样做时我希望显示 logcat
的传入 jstring
参数以验证其正确性。
我已尝试使用以下代码来执行此操作,但它总是崩溃。
LOGD(myStringArg);
其中 myStringArg
声明为 jstring
.
如果我在我的 JNI
函数中声明并定义另一个 jstring
并且 LOGD
那个,它就可以工作。但是,出于某种原因,如果我在 JNI
函数参数上调用 LOGD
它会崩溃。我已经在内部验证 jstring
不为空,并且在 Java 函数中调用它之前,我还检查了该值是否正确。
我已经将 jstring 转换为 const char * 如下:
const char *charString;
charString = (const char*)(*env)->GetStringUTFChars(env, myStringArg, NULL);
LOGD(charString);
没有任何显示,表示charString为空?
知道怎么做吗?
谢谢。
您需要将 jstring
转换为原生 char*
或 string
。例如:
// Get a pointer to an array of bytes representing the string in modified UTF-8 encoding
char *str = env->GetStringUTFChars(myStringArgs, NULL);
// Now you can log str
// Inform the VM that the native code no longer needs access to str
env->ReleaseStringUTFChars(myStringArg, str);
有关 JNI 函数的详细信息,请参阅 http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/functions.html。
您可以尝试使用此方法从 jstring 中提取字符:
const char* getCharFromString(JNIEnv* env, jstring string){
if(string == NULL)
return NULL;
return env->GetStringUTFChars(string ,0);
}
这样您就可以将 jstring
打印为 (const char*)
:
LOGD(getCharFromString(env, myStringArg));
如果打印此字符串时仍有问题,请尝试使用以下方法调试内容:
int getBytesNeededByString(JNIEnv* env, jstring string){
return env->GetStringUTFLength(string);
}
int getNumberOfCharsInString(JNIEnv* env, jstring string){
return env->GetStringLength(string);
}
你可以这样试试,
LOGD("String from java is %s\n",charString);
它对我有用。
试试这个: __android_log_print(ANDROID_LOG_DEBUG, "LOG_TAG", "text:%s ", charString );