如何将jobject转换为jstring

glo*_*glo 6 c++ java java-native-interface cocos2d-x

我试图获得一个字符串,以回报从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));        
}
Run Code Online (Sandbox Code Playgroud)

在编译时我得到了错误

错误:从'_jobject*'到'_jstring*'的转换无效

谁能告诉我如何解决这个问题.

use*_*079 9

干得好 ...

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;
    }
Run Code Online (Sandbox Code Playgroud)

如果你想让它以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;
}
Run Code Online (Sandbox Code Playgroud)