我正在研究cocos2dx项目,在JNI调用中,方法返回一个包含base64编码字符串的java字符串,但是我很快就尝试从jstring到C ++端的const char,它会给出错误,你能帮我吗?在这里?
string getBase64EncodingJNI(std::string pData) {
JniMethodInfo methodInfo;
if (JniHelper::getStaticMethodInfo(methodInfo, "com/abc/something/modules/myHelper", "getBase64Encoding", "(Ljava/lang/String;)Ljava/lang/String;")) {
jstring jData;
if (!pData.c_str())
jData = methodInfo.env->NewStringUTF("");
else
jData = methodInfo.env->NewStringUTF(pData.c_str());
jstring output = (jstring) methodInfo.env->CallStaticObjectMethod(methodInfo.classID, methodInfo.methodID,jData);
const char *strReturn = methodInfo.env->GetStringUTFChars(output, 0);
string outputData = strReturn;
methodInfo.env->DeleteLocalRef(methodInfo.classID);
methodInfo.env->DeleteLocalRef(jData);
methodInfo.env->ReleaseStringUTFChars(output, strReturn);
return outputData;
}
return "";
}
这是被称为
的方法public static String getBase64Encoding(String pdata) {
String encodedStr = Base64.encodeToString (pdata.getBytes(), Base64.DEFAULT);
return encodedStr;
}
我在行GetStringUTFChars
上收到错误我想准备好编码的jstring并将其传递给其他函数。错误是
JNI在应用程序中检测到错误:使用挂起异常java.lang.IllegalArgumentException调用JNI GetStringUTFChars:bad base-64