百度地图定位后数据为null

1. 概述

这里记录下自己项目中的,首页百度地图获取定位后无法获取定位后的数据。

场景:
在首页HomeFragment中,一开始进入界面后需要获取当前位置,在本地接口的http环境下定位成功后,可以获取到当前位置的city、address及经纬度等信息,但是切换到线上的 https环境后,然后再次在首页获取定位,这个时候定位后,貌似只能获取到经纬度,其余的 city、地址等所有信息全是 null,自己也不知道啥原因,感觉和https环境没关系,自己处理方式是:定位成功后,获取到经纬度,采用反编码,根据经纬度获取地址信息;

哪位知道啥原因的可以给我留言,自己不太清楚这个啥原因;

2. 代码如下

@Override
    public void onResume() {
        super.onResume();
        initLocationOption() ;
    }

private void initLocationOption() {
        //定位服务的客户端。宿主程序在客户端声明此类,并调用,目前只支持在主线程中启动
        LocationClient locationClient = new LocationClient(BaseApplication.getContext());
        //声明LocationClient类实例并配置定位参数
        LocationClientOption locationOption = new LocationClientOption();
        MyLocationListener myLocationListener = new MyLocationListener();
        //注册监听函数
        locationClient.registerLocationListener(myLocationListener);
        //可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
        locationOption.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
        //可选,默认gcj02,设置返回的定位结果坐标系,如果配合百度地图使用,建议设置为bd09ll;
        locationOption.setCoorType("gcj02");
        //可选,默认0,即仅定位一次,设置发起连续定位请求的间隔需要大于等于1000ms才是有效的
        locationOption.setScanSpan(1000);
        //可选,设置是否需要地址信息,默认不需要
        locationOption.setIsNeedAddress(true);
        //可选,设置是否需要地址描述
        locationOption.setIsNeedLocationDescribe(true);
        //可选,设置是否需要设备方向结果
        locationOption.setNeedDeviceDirect(false);
        //可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
        locationOption.setLocationNotify(true);
        //可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
        locationOption.setIgnoreKillProcess(true);
        //可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”
        locationOption.setIsNeedLocationDescribe(true);
        //可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
        locationOption.setIsNeedLocationPoiList(true);
        //可选,默认false,设置是否收集CRASH信息,默认收集
        locationOption.SetIgnoreCacheException(false);
        //可选,默认false,设置是否开启Gps定位
        locationOption.setOpenGps(true);
        //可选,默认false,设置定位时是否需要海拔信息,默认不需要,除基础定位版本都可用
        locationOption.setIsNeedAltitude(false);
        //设置打开自动回调位置模式,该开关打开后,期间只要定位SDK检测到位置变化就会主动回调给开发者,该模式下开发者无需再关心定位间隔是多少,定位SDK本身发现位置变化就会及时回调给开发者
        locationOption.setOpenAutoNotifyMode();
        //设置打开自动回调位置模式,该开关打开后,期间只要定位SDK检测到位置变化就会主动回调给开发者
        locationOption.setOpenAutoNotifyMode(3000,1, LocationClientOption.LOC_SENSITIVITY_HIGHT);
        //开始定位
        locationClient.start();
    }


/**
     * 实现定位回调
     */
    public class MyLocationListener extends BDAbstractLocationListener {

        /**
         * 定位
         */
        @Override
        public void onReceiveLocation(BDLocation location){
            //此处的BDLocation为定位结果信息类,通过它的各种get方法可获取定位相关的全部结果
            //以下只列举部分获取经纬度相关(常用)的结果信息
            //更多结果信息获取说明,请参照类参考中BDLocation类中的说明

            //获取纬度信息
            double latitude = location.getLatitude();
            //获取经度信息
            double longitude = location.getLongitude();
            //获取定位精度,默认值为0.0f
            float radius = location.getRadius();
            //获取经纬度坐标类型,以LocationClientOption中设置过的坐标类型为准
            String coorType = location.getCoorType();
            //获取定位类型、定位错误返回码,具体信息可参照类参考中BDLocation类中的说明
            int errorCode = location.getLocType();

            String addrStr = location.getAddrStr();
            int locationWhere = location.getLocationWhere();
            String buildingName = location.getBuildingName();
            Address address = location.getAddress();
            String street = location.getStreet();
            List<Poi> poiList = location.getPoiList();
//            List<Poi> poiList = location.getPoiList();
//            String name = poiList.get(0).getName();

            Log.e("TAG" , "定位回调:latitude: "+latitude+", longitude: "+longitude+", addrStr: "+addrStr+", locationWhere: "+locationWhere+", " +
                    "buildingName: "+buildingName+", address: "+address+", street: "+street+", poiList: "+poiList) ;
            LatLng ll = new LatLng(location.getLatitude(),
                    location.getLongitude());


            // 定位成功后,保存当前位置经纬度
            String strLatitude = Double.toString(latitude) ;  // 维度
            String strLongitude = Double.toString(longitude) ;// 经度

            PrefUtils.putString(getActivity() , "strLatitude" , strLatitude);
            PrefUtils.putString(getActivity() , "strLongitude" , strLongitude);

            getdata(ll);
        }
    }


    /**
     * 定位后获取当前经纬度,根据经纬度 采用反编码 获取当前位置信息
     */
    private void getdata(LatLng ll) {
        GeoCoder geoCoder = GeoCoder.newInstance();
        //
        OnGetGeoCoderResultListener listener = new OnGetGeoCoderResultListener() {
            // 反地理编码查询结果回调函数
            @Override
            public void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) {
                if (result == null
                        || result.error != SearchResult.ERRORNO.NO_ERROR) {
                    // 没有检测到结果
                    Toast.makeText(getActivity() , "抱歉,未能找到结果",
                            Toast.LENGTH_LONG).show();
                    return;
                }

                /*String addressBig = result.getSematicDescription(); // 美华·海润大厦南135米
                String addressSmall = result.getAddress() ; // 北京市海淀区海淀南路36号,


                String address = result.getAddress();
                String street = result.getAddressDetail().street;
                String businessCircle = result.getBusinessCircle();
                List<ReverseGeoCodeResult.PoiRegionsInfo> poiRegionsInfoList = result.getPoiRegionsInfoList();
                List<PoiInfo> poiInfos = (ArrayList<PoiInfo>) result.getPoiList();*/

                List<PoiInfo> poiInfos = (ArrayList<PoiInfo>) result.getPoiList();

                address = poiInfos.get(0).address ;

                // 如果定位成功,则用sp保存定位后当前默认的地址
                PrefUtils.putString(getActivity() , DEFAULT_POSI , address);

                showPosiAddress(address) ;

            }

            // 地理编码查询结果回调函数
            @Override
            public void onGetGeoCodeResult(GeoCodeResult result) {
                if (result == null
                        || result.error != SearchResult.ERRORNO.NO_ERROR) {
                    // 没有检测到结果
                }
            }
        };
        // 设置地理编码检索监听者
        geoCoder.setOnGetGeoCodeResultListener(listener);
        //
        geoCoder.reverseGeoCode(new ReverseGeoCodeOption().location(ll));
    }


    private void showPosiAddress(String address) {
        if (!TextUtils.isEmpty(mAddressFlag)){
            tv_location.setText(!TextUtils.isEmpty(mAddressFlag) ? mAddressFlag : "");
        }else if (!TextUtils.isEmpty(address)) {
            tv_location.setText(!TextUtils.isEmpty(address) ? address : "");
        }
    }

更详细的可以参照 下边这篇博客:
https://blog.csdn.net/a_ycmbc/article/details/51459502

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容

  • CoreLocation框架 一. iOS8.0之前的定位(✨✨✨✨✨) 前台定位导入CoreLocation框架...
    尼古拉斯赵四爷阅读 968评论 0 2
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,704评论 2 59
  • 莱昂纳德科恩说,万物皆有裂痕,那是光照进来的地方。 把疾病同样当成生活的一种体验,便看的开了。 自我记事起,我身体...
    疯兔先生阅读 591评论 0 4
  • 儿子:妈妈,我要打篮球,这是老师的电话号码! 妈妈:要马上打? 儿子:是的,而且打电话要说您好,请问,并把班级报上...
    五箴阅读 430评论 0 0
  • 假如我只剩下十年的寿命,那么我会感到非常难过。 总是以为这辈子还很漫长,没想到只有十年的寿命了,想想就会非常非常难...
    梅飞菲阅读 218评论 1 5