как преобразовать jobject в 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*'
1 ответ:
Вот, пожалуйста ...
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; }