[英]JNI. How to get jstring from jobject and convert it to char*
[英]how to convert jobject to jstring
我试图获得一个字符串,以回报从cpp到java的函数调用。
这是我的JNI电话
string GetIDJni()
{
cocos2d::JniMethodInfo methodInfo;
if (! JniHelper::getStaticMethodInfo(methodInfo, CLASS_NAME, "GetID", "()Ljava/lang/String"))
{
return "";
}
jobject retObj = methodInfo.env->CallStaticObjectMethod(methodInfo.classID, methodInfo.methodID);
jstring retStr = (jstring)retObj;
methodInfo.env->DeleteLocalRef(methodInfo.classID);
return (JniHelper::jstring2string(retStr));
}
在编译时我得到了错误
错误:从'_jobject *'到'_jstring *'的转换无效
谁能告诉我如何解决这个问题。
干得好 ...
const char* GetIDJni() {
JniMethodInfo t;
if (JniHelper::getStaticMethodInfo(t, CLASS_NAME, "GetIDJni", "()Ljava/lang/String;")) {
jstring str = (jstring)t.env->CallStaticObjectMethod(t.classID, t.methodID);
t.env->DeleteLocalRef(t.classID);
CCString *ret = new CCString(JniHelper::jstring2string(str).c_str());
ret->autorelease();
t.env->DeleteLocalRef(str);
return ret->m_sString.c_str();
}
return 0;
}
如果你想让它以std :: String的形式返回
std::string GetIDJni() {
std::string ret;
JniMethodInfo t;
if (JniHelper::getStaticMethodInfo(t, CLASS_NAME, "GetIDJni", "()Ljava/lang/String;")) {
jstring str = (jstring)t.env->CallStaticObjectMethod(t.classID, t.methodID);
t.env->DeleteLocalRef(t.classID);
ret=JniHelper::jstring2string(str);
t.env->DeleteLocalRef(str);
return ret;
}
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.