我的Java類的靜態函數定義如下:通過C++發送參數到Java
public static void logEvent(final String eventName, final String jObject) {
//Function data
}
現在我的cpp文件具有以下功能
void PingoScreen::callApslarIntegration(){
char* eventName="bingo";
JniMethodInfo t;
if (JniHelper::getStaticMethodInfo(t, "com/myapp/test/ApslarSetup","logEvent", "()V")) {
t.env->CallStaticVoidMethod(t.classID, t.methodID);
t.env->DeleteLocalRef(t.classID);
}
}
我怎麼能發送兩個字符串PARAMS到通過JNI的JAVA功能?
親切的問候
======================================== =======================
void PingoScreen::callApsIntegration() {
JniMethodInfo t;
if (JniHelper::getStaticMethodInfo(t, "com/myapp/test/ApslarSetup",
"logJSONEvent", "()V")) {
const char* cstr1 = "Test1";
const char* cstr2 = "Test2";
jstring jstr1 = t.env->NewStringUTF(cstr1);
jstring jstr2 = t.env->NewStringUTF(cstr2);
t.env->CallStaticVoidMethod(t.classID, t.methodID,jstr1,jstr2);
t.env->DeleteLocalRef(t.classID);
}
}
上面的函數會導致崩潰?
==================================
終於得到它的工作
void PingoScreen::callApslarIntegration() {
JniMethodInfo t;
if (JniHelper::getStaticMethodInfo
(t, "com/nbs/test/ApslarSetup",
"logJSONEvent",
"(Ljava/lang/String;Ljava/lang/String;)V")) {
const char* cstr1 = "Test1";
const char* cstr2 = "Test2";
jstring jstr1 = t.env->NewStringUTF(cstr1);
jstring jstr2 = t.env->NewStringUTF(cstr2);
t.env->CallStaticVoidMethod(t.classID, t.methodID,jstr1,jstr2);
t.env->DeleteLocalRef(t.classID);
}
}
墜機是由於線路
if (JniHelper::getStaticMethodInfo
(t, "com/nbs/test/ApslarSetup",
"logJSONEvent",
"(Ljava/lang/String;Ljava/lang/String;)V"))
的signiture必須是Ljava/lang/String;Ljava/lang/String;
和不Ljava/lang/String;Ljava/lang/String
(注意最後分號)
提示:使用'javap -s -public com.nbs.test.ApslarSetup | egrep -A 2「logJSONEvent」'獲取要與JNI一起使用的簽名。 –