以下のように、JNI を介して非静的 Java メソッドを呼び出すことができます。
【C++コード】
jclass classID = minfo.env->FindClass("com/halfmeters/sangosloto/AliPayActivity");
jmethodID method = minfo.env->GetMethodID(classID,"pay","(Ljava/lang/String;)Z");
jobject obj = minfo.env->NewObject(classID, method);
jstring strOrder = minfo.env->NewStringUTF("test");
jboolean result = minfo.env->CallBooleanMethod(obj, method,strOrder);//minfo.methodID);
minfo.env->DeleteLocalRef(strOrder);
minfo.env->DeleteLocalRef(minfo.classID);
【Javaメソッド宣言】
public boolean pay(String orderInfo){
System.out.println("Order info:" + orderInfo); // caught an exception
}
C++ で関数を実行すると、次のように Java 側で例外がスローされるようになりました。
09-06 11:46:45.229: E/AndroidRuntime(31141): FATAL EXCEPTION: GLThread 12
09-06 11:46:45.229: E/AndroidRuntime(31141): java.lang.NullPointerException
09-06 11:46:45.229: E/AndroidRuntime(31141): at android.content.ContextWrapper.bindService(ContextWrapper.java:347)
09-06 11:46:45.229: E/AndroidRuntime(31141): at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:155)
09-06 11:46:45.229: E/AndroidRuntime(31141): at java.lang.StringBuilder.append(StringBuilder.java:217)
09-06 11:46:45.229: E/AndroidRuntime(31141): at com.test.AliPayActivity.pay(AliPayActivity.java:322)
09-06 11:46:45.229: E/AndroidRuntime(31141): at org.cocos2dx.lib.Cocos2dxRenderer.nativeTouchesEnd(Native Method)
09-06 11:46:45.229: E/AndroidRuntime(31141): at org.cocos2dx.lib.Cocos2dxRenderer.handleActionUp(Cocos2dxRenderer.java:79)
09-06 11:46:45.229: E/AndroidRuntime(31141): at org.cocos2dx.lib.Cocos2dxGLSurfaceView$10.run(Cocos2dxGLSurfaceView.java:345)
09-06 11:46:45.229: E/AndroidRuntime(31141): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1326)
09-06 11:46:45.229: E/AndroidRuntime(31141): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1118)
誰がそれの何が問題なのかを確認するのを助けることができますか? ありがとう!PS この手順で java メソッドの pay(String) が 2 回呼び出されていることがわかりましたが、それがどのように行われるかはわかりません。