2012-12-26 3 views
5

Ich versuche, eine Zeichenfolge im Gegenzug zu einem Funktionsaufruf von cpp zu Java zu bekommen.Wie man Jobject in jstring konvertiert

Das ist mein JNI Aufruf

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

zum Kompilieren ich den Fehler bekommen

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

Kann jemand bitte sagen Sie mir, wie dieses Problem zu lösen.

Antwort

9

Hier gehen Sie ...

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

Und wenn Sie wollen es als std zurückkehren bekommen :: String dann

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

Was haben Sie anders, mit Ausnahme das Casting auf der gleichen tun Linie mit dem Funktionsaufruf? – SomethingSomething