线程问题 之 支付时支付界面未弹出问题(C++调用Java)

来源:互联网 发布:php基础知识:blog 编辑:程序博客网 时间:2024/05/16 04:24

<1>问题:

就是当你点击购买时,购买界面根本没有弹出来,这里是C++调用Java.


<2>Java端代码实现.

 private static Handler mHandler = null; 

//根据订单号购买商品(由C++调用)public void buyWithCooOrderSerial(final String orderId, final int tag){mHandler = new Handler(Looper.getMainLooper());mHandler.postDelayed(new Runnable(){@Overridepublic void run() {if(ctx != null){Log.e("****所购买的商品 订单号和标识号(Java端显示)****", "订单号:" + orderId + "***标识号:" + String.valueOf(tag));    //订单号productId    String productIdArray[] = {                "115429-20140801-105232094-84",                "115429-20140728-194402904-98",                "115429-20140728-194723885-16",                "115429-20140728-194822884-58",                "115429-20140728-194909696-39",                "115429-20140728-195031058-12",                "115429-20140728-195115225-34"        };        // 商品名字    String productNameArray[] = {     "月卡",                 "金元宝",                 "一堆金元宝",                 "一袋金元宝",                 "一盒金元宝",                 "一桶金元宝",                 "一箱金元宝"    };        //商品价格    double moneyArray[]  = {30, 6, 30, 98, 198, 368, 648};    NdBuyInfo buyInfo = new NdBuyInfo();buyInfo.setSerial(orderId);buyInfo.setProductId(productIdArray[tag]);buyInfo.setProductName(productNameArray[tag]);buyInfo.setProductPrice(moneyArray[tag]);buyInfo.setCount(1);buyInfo.setPayDescription("商品描述信息:我就是这么帅!!!");//购买结果监听int aError = NdCommplatform.getInstance().ndUniPayAsyn(buyInfo, ctx, new NdMiscCallbackListener.OnPayProcessListener() { @Overridepublic void finishPayProcess(int code) {tipsBuyCode(code);}});if(aError != 0){Log.e("**商品格式不对***", "***商品格式不对**");}}}}, 1);}

总结:解决方案就是这个好用的Handler ,Handler相当于开一个线程,当使用完毕后,自动回收.这就比较爽了.因此当在C++调用Java时,Java端代码的实现,请考虑Handler!

<3>C++端调用Java代码.
void My91LoginImplAndroid::buyWithCooOrderSerial(string orderId)  //根据订单号购买商品{    this->myOrderId = orderId;    _my91Login->myOrderId = orderId;        CCLOG("*******Android平台根据订单号买商品*******");    JniMethodInfo minfo;    jobject jobj;    if(JniHelper::getStaticMethodInfo(minfo, CLASS_NAME, "getInstance", "()Ljava/lang/Object;"))    {        jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID);        if(JniHelper::getMethodInfo(minfo, CLASS_NAME, "buyWithCooOrderSerial", "(Ljava/lang/String;I)V"))        {            if(jobj == NULL)            {                return;            }            CCLog("***订单号:%s********标识号: %d*******", orderId.c_str(), tag);            //传递订单号 和 标识 参数            jstring jorderId = minfo.env->NewStringUTF(orderId.c_str()); //string 转化jstring            jint jtag = tag;  //int转化jint            minfo.env->CallVoidMethod(jobj, minfo.methodID, jorderId, jtag);            CCLOG("*****JNI调用订单购买成功******");        }    }}
总结:注意里面有C++的string转化为Java的String类型.其次,Java段代码的final对C++这端的签名没影响.



0 0
原创粉丝点击