通过jni实现c++和java互调
来源:互联网 发布:java入门视频百度网盘 编辑:程序博客网 时间:2024/04/30 13:43
1、java调用c++
首先,在java中声明相关方法
public static native void doLogin(String sid);public static native void doBindingSuc(String sid);
相关的调用方法如下:
public void login() {this.runOnUiThread(new Runnable() {public void run() {//下面部分为sdk提供的参数,可以不用管TYGame.login("F2", "L8", "6",bombEN4Android.this, new LoginResultListener() {@Overridepublic void loginSuccess(final String sid) {// TODO 登陆成功//myMessage.setText("登陆成功!\n" + sid);//Log.e("sid", sid);bombEN4Android.doLogin(sid); //调用c++方法}@Overridepublic void loginFail() {// TODO 登陆失败//myMessage.setText("登陆失败!");}});}});}public void doBinding(){this.runOnUiThread(new Runnable(){public void run() {TYGame.bindingAccount("F", "L8","6", bombEN4Android.this, new BindingAccountListener() {@Overridepublic void success(String sid) {//myMessage.setText("绑定成功!\n" + sid);bombEN4Android.doBindingSuc(sid); //调用c++方法}@Overridepublic void failure() {// TODO Auto-generated method stub//myMessage.setText("绑定失败!");}});}});}
c++中相关方法的实现:
void Java_com_lmj_bombENAndroid_bombEN4Android_doLogin(JNIEnv *env, jobject thiz, jstring token) { const char *productStr = env->GetStringUTFChars(token, NULL); string nowToken = productStr; LocalPlayerModel::sharedLocalPlayerModel()->setUnionUid(ccs(nowToken)); CCNotificationCenter::sharedNotificationCenter()->postNotification(ZQYJ_LOGIN); env->ReleaseStringUTFChars(token, productStr); } void Java_com_lmj_bombENAndroid_bombEN4Android_doBindingSuc(JNIEnv *env, jobject thiz, jstring token) { CCNotificationCenter::sharedNotificationCenter()->postNotification(ZQYJ_LOGIN); const char *productStr = env->GetStringUTFChars(token, NULL); string nowToken = productStr; LocalPlayerModel::sharedLocalPlayerModel()->setUnionUid(ccs(nowToken)); LocalPlayerModel::sharedLocalPlayerModel()->doTyBounding(NULL); env->ReleaseStringUTFChars(token, productStr); //如果没传参数,那么这个方法的内容可以为空,不用释放 }
2、c++调用java
c++中调用方法
方法的定义:
void payTY(CCString *productId,CCString *orderId,int serverId,CCString *playerId, CCString *playerName, int price, CCString *productName);
方法的实现:
void AndroidUtils::payTY(CCString *productId,CCString *orderId,int serverId,CCString *playerId, CCString *playerName, int price, CCString *productName){ JniMethodInfo minfo; string s="()L"+ANDROID_ACTIVITY_NAME+";"; bool isHave = JniHelper::getStaticMethodInfo(minfo,ANDROID_ACTIVITY_NAME.c_str(),"getInstance",s.c_str()); jobject jobj; if (isHave) { jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID); } isHave = JniHelper::getMethodInfo(minfo,ANDROID_ACTIVITY_NAME.c_str(),"pay","(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;ILjava/lang/String;)V"); if (isHave) { jstring str1 = minfo.env->NewStringUTF(productId->getCString()); jstring str2 = minfo.env->NewStringUTF(orderId->getCString()); jstring str3 = minfo.env->NewStringUTF(playerId->getCString()); jstring str4 = minfo.env->NewStringUTF(playerName->getCString()); jstring str5 = minfo.env->NewStringUTF(productName->getCString()); minfo.env->CallVoidMethod(jobj, minfo.methodID, str1,str2,serverId,str3,str4,price, str5); minfo.env->DeleteLocalRef(str1); minfo.env->DeleteLocalRef(str2); minfo.env->DeleteLocalRef(str3); minfo.env->DeleteLocalRef(str4); minfo.env->DeleteLocalRef(str5); }}其中,
static const string ANDROID_ACTIVITY_NAME="com/lmj/bombENAndroid/bombEN4Android";
调用了bombEN4Android.java中的pay方法。
java中的pay方法:
public void pay(final String productId, final String orderId, final int serverId, final String playerId, final String playerName, int price, final String productName){this.runOnUiThread(new Runnable(){public void run() {System.out.println("123");System.out.println(productName);System.out.println(orderId);System.out.println(playerId);System.out.println(playerName);System.out.println("456");String _playerName = null;String _productName = null;}});}
0 0
- AndroidStudio下通过JNI实现java和c互调
- 通过jni实现c++和java互调
- cocos2d-x通过jni实现c++和java互调
- cocos2d-x 通过JNI实现c/c++和Android的java层函数互调
- cocos2d-x 通过JNI实现c/c++和Android的java层函数互调
- cocos2d-x 通过JNI实现c/c++和Android的java层函数互调
- cocos2d-x 通过JNI实现c/c++和Android的java层函数互调
- 通过JNI实现c/c++和Android的java层函数互调
- cocos2d-x 通过JNI实现c/c++和Android的java层函数互调
- (转)cocos2d-x 通过JNI实现c/c++和Android的java层函数互调
- cocos2d-x 通过JNI实现c/c++和Android的java层函数互调 .
- cocos2d-x 通过JNI实现c/c++和Android的java层函数互调
- cocos2d-x 通过JNI实现c/c++和Android的java层函数互调
- cocos2d-x 通过JNI实现c/c++和Android的java层函数互调
- cocos2d-x 通过JNI实现c/c++和Android的java层函数互调
- Cocos2dx之通过JNI实现c/c++和Android的java层函数互调
- cocos2d-x 通过JNI实现c/c++和Android的java层函数互调
- cocos2d-x 通过JNI实现c/c++和Android的java层函数交互
- hadoop-2.X启动后用JPS命令查看,resourcemanger无法启动:地址已被使用
- Spring 4.x+Spring MVC 4.x+MyBatis 3.x 整合(四)Spring 3.1.0 整合
- HDU5183Negative and Positive (NP)(哈希表)
- POJ2965 The Pilots Brothers' refrigerator(枚举+思维题)
- 地址宏定义
- 通过jni实现c++和java互调
- LightOJ 1422 - Halloween Costumes(区间DP)
- The container 'Android Dependencies' references non existing library
- 莀莂蚈肃腿莄螄蝿聿莇袀羈
- 羆膁葿蚁羅芄芁薇肄羃蒇蒃
- 衿膅肇蚆袁芁芆蒆螄袄莅莅
- 2015.3.17图书馆的管理系统
- 螀肈芀蚄袃袀膆蚃薂肆肂蚂
- 蚁羆膂螀螇膅莄蚂螂袁芄蚅