百度地图设置mBaiduMap.setOnMapLoadedCallback监听有时没有触发问题

一、问题描述

项目中用到了百度地图功能,其中的有一个功能是从网络获取之前的定位信息显示到地图上,显示合适的缩放效果;

做法是在请求到网络数据后设置setOnMapLoadedCallback监听,在onMapLoaded中设置定位的经度纬度等定位信息;

  ------这里是成功从网络获取到数据的回调-------     
       //地图加载监听
        mBaiduMap.setOnMapLoadedCallback(new BaiduMap.OnMapLoadedCallback() {
            @Override
            public void onMapLoaded() {
              //设置从网络获取到的定位信息
            }
        });

但是测试图层显示的效果是,有时显示正常,能够正确显示定位的地址;有时又不正常,显示的是默认的北京那个地址;

并且具有一定的随机性,没有规律性;

二、问题分析

1.经调试发现一个问题,setOnMapLoadedCallback有时触发有时没有触发,几次正常中可能就会出现一次不正常。

因此可以确定显示的问题就是setOnMapLoadedCallback没有调用引起的;

2.经测试发现,在initviews即OnCreate初始化view的时候设置setOnMapLoadedCallback监听是正常有效的,每次都能接收到地图加载完成的回调,而在网络获取数据后再去设置监听则会导致有时调用有时没有调用

3.在initviews中设置监听,加载完成后打印一个log,同时打印网络请求数据成功后的log,对比后发现:

(1).地图先加载完成后,然后网络数据也请求完成

(2)网络数据先加载完成,然后才是地图加载完成

由此可以判断这是时间不同步造成的,地图加载和网络请求都是耗时操作;在地图加载完成后去显示数据,可能数据还未请求到;在数据请求完成后再去设置地图加载监听,就可能不是时候了,导致时而有效时而无效。

三、问题解决方案:

目前的解决方法:

1.在初始化view的时候设置setOnMapLoadedCallback监听,同时设置一个加载完成的标识

        //地图加载监听
        mBaiduMap.setOnMapLoadedCallback(new BaiduMap.OnMapLoadedCallback() {
            @Override
            public void onMapLoaded() {
                isMapLoaded = true;
                if (isNetworkRequest) {
                    //这里执行成功获取网络数据的定位缩放显示操作
                } 
            }
        });
    }

2.网络请求数据成功后同样设置一个标识,然后通过标识分别判断先后顺序

     ---------网络请求成功数据回调----------

if (isMapLoaded ) {
  //到此如果地图已加载完成,则执行定位缩放显示操作
} else {
    isNetworkRequest = true;
    //如果地图到此还未加载完成,则标记,等setOnMapLoadedCallback中回调执行

 

主要就是一个先后顺序的问题,知道了原因解决方案有很多,我这里只是用了一个最初级的方法,但是也有效

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值