java 调用js时出现问题,老哥们帮忙看下

代码如下:
Runnable payRunnable = new Runnable() {
@Override
public void run() {
PayTask alipay = new PayTask(app);
Map<String,String> result = alipay.payV2(payInfo, true);
Message msg = new Message();
msg.what = 10001;
msg.obj = result;
mHandle.sendMessage(msg);
}
};
Thread payThread = new Thread(payRunnable);
payThread.start();

@SuppressLint(“HandlerLeak”)
public static Handler mHandle = new Handler() {
@SuppressWarnings(“unused”)
public void handleMessage(Message msg) {
if(msg.what == 10001) {
PayResult payResult = new PayResult((Map<String, String>) msg.obj);
final String resultStatus = payResult.getResultStatus();
app.runOnGLThread(new Runnable() {
@Override
public void run() {
Cocos2dxJavascriptJavaBridge.evalString(“OfficialSDK.PayCallBack(’”+ resultStatus +"’)");
}
});
} else {
}
}
};

错误信息:call to OpenGL ES API with no current context (logged once per thread)
查了资料说 如果在非openGL线程调用GL相关操作,就会报此错误。那应该怎么去调用app.runOnGLThread呢

这两天刚好用到
AppActivity.getInstance().runOnGLThread(new Runnable() {
public void run() {
funC()
}
});

老哥 可以把代码贴完整一点吗?我之前也用你这个方案写过,但是还是不行

你这个写法和我这样写应该差不多,我的代码里app相当于AppActivity.getInstance()吧

我是调用lua,应该是差不多的

老哥 如果只是你这样调用的话 我直接测试过也是没问题的 ,问题就在于我这个runOnGLThread是在子线程里调用的。顺便问下你那边接支付宝支付怎么接的方便交流一下吗?我这边的流程就是上面代码展示的那样:在js调用java方法之后,新建子线程,然后在子线程里调用mHandle.sendMessage(msg),接着在handleMessage里获取返回结果,然后调用app.runOnGLThread()。

感觉你写的Handler会有点别扭,不知道还能用static去修饰Handler :sweat_smile:,难道不应该像下面这样使用?

private Handler mHandle = new Handler( ) { 

    @Override
    public void handleMessage(Message msg) {
        //TODO handle message...
    }

};

或者

private Handler mHandle = new MyHandler(this);

private static class MyHandler extends Handler {

    private final WeakReference<Activity> mActivity;

    public MyHandler(Activity activity) {
        mActivity = new WeakReference<Activity>(activity);
    }

    @Override
    public void handleMessage(Message msg) {
        if(mActivity.get() == null) {
            return;
        }
        //TODO handle message...
    }
}

哎 找到点眉目了 问题不是出在这 额 这报错信息感觉有点误导人啊。。Cocos2dxJavascriptJavaBridge.evalString(“OfficialSDK.PayCallBack(’”+ resultStatus +"’)");
这里调用的PayCallBack方法里,有这样一段代码
Global.player.cash = 1;
Global.OnPlayerInfoChanged();
MessageBox.show(“充值成功”, MessageBox.OK,null);

Global 和MessageBox都是全局变量;
做打印发现获取不到Global和MessageBox里的值;
开始我以为是本来就获取不到,但是后面我把app.runOnGLThread这个方法直接在外面调用,就像你的代码那样,他又是能获取到Global和messagebox值的。这。。。给我整无语了

我接的是九游的,里面啥支付都有,滑稽.jpg