2012-12-26 42 views
5

我想從cpp到java的函數調用返回一個字符串。如何將jobject轉換爲jstring

這是我的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));   
} 

在編譯我的錯誤

error: invalid conversion from '_jobject*' to '_jstring*'

誰能告訴我如何解決這個問題。

回答

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; 
    } 

如果你想獲得它作爲返回的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; 
} 
+0

你是怎麼不同,除了做鑄件在同一與函數調用? – SomethingSomething