uni-app callback.invokeAndKeepAlive(object)没有回调

uni-app callback.invokeAndKeepAlive(object)没有回调

开发环境 版本号 项目创建方式
Windows HBuilderX

产品分类:uniapp/App

PC开发环境操作系统:Windows

PC开发环境操作系统版本号:windows10

HBuilderX类型:正式

HBuilderX版本号:3.1.6

手机系统:Android

手机系统版本号:Android 10

手机厂商:小米

手机机型:小米

页面类型:vue

打包方式:云端

项目创建方式:HBuilderX


操作步骤:

[@UniJSMethod](/user/UniJSMethod)  
public void addTapListener(JSONObject param, UniJSCallback callback) {  
    final MapView mapView = getObj(param);  
    final UniJSCallback callback1 = callback;  
    mapView.setTapListener(new MapView.MapViewTapListener() {  
        @Override  
        public void mapViewTap(PointF pointF) {  
            Dot dot = mapView.viewPointToMapPoint(pointF);  
            JSONObject object = new JSONObject();  
            object.put("x", dot.x);  
            object.put("y", dot.y);  
            File file = new File(JSEnvironment.getRootPath("~/1.txt"));  
            FileTool.writeTxt(file, object.toJSONString());  
            callback1.invokeAndKeepAlive(object);  
            FileTool.flushFile(mUniSDKInstance.getContext(), file);//为了测试的代码,实际每次点击地图都会在SD卡上记录坐标,但没有触发.invokeAndKeepAlive的js回调  
        }  
    });  
    ok(callback);//必须调用callback,不然前端JS会停止执行  
}

更多关于uni-app callback.invokeAndKeepAlive(object)没有回调的实战教程也可以访问 https://www.itying.com/category-93-b0.html

8 回复

已解决!

更多关于uni-app callback.invokeAndKeepAlive(object)没有回调的实战教程也可以访问 https://www.itying.com/category-93-b0.html


请问是怎么解决的,我现在也遇到这个问题了,

你这个ok(callback)方法哪里来的。为啥我这边没有可以引用的这个方法

我也想知道这是怎么解决的

你好 ,请问是怎么解决的,我现在也遇到这个问题了

你好 ,请问是怎么解决的,我现在也遇到这个问题了

请问是怎么解决的,小程序资源更新后第一次打开小程序也遇到了这个问题,callback.invokeAndKeepAlive无法回调

在您的代码中,callback.invokeAndKeepAlive(object) 没有触发JS回调可能有几个原因:

  1. 回调调用时机问题mapViewTap 是异步事件,可能在调用 invokeAndKeepAlive 时,前端的回调监听器尚未就绪。确保在调用前,前端已通过 uni.requireNativePlugin 正确注册了监听。

  2. 线程问题:Android UI操作需在主线程执行。如果 mapViewTap 在非UI线程触发,可能导致回调无法传递。尝试用 runOnUiThread 包裹回调调用:

    mapView.setTapListener(new MapView.MapViewTapListener() {
        @Override
        public void mapViewTap(PointF pointF) {
            // ... 坐标处理代码
            mUniSDKInstance.getActivity().runOnUiThread(() -> {
                callback1.invokeAndKeepAlive(object);
            });
        }
    });
回到顶部