0
点赞
收藏
分享

微信扫一扫

Android调用新版百度天气api,解决地理编码问题

分湖芝蘭 2022-04-03 阅读 49
javaandroid

我在学习制作天气预报app的时候,先调用新版百度地图api时发现,百度取消了原有api链接的city参数,反倒是改为了district_id,看到这个的时候我一脸蒙蔽,全国那么多地区,我要怎么一一获取到他们的地理编码,这个问题困扰了我半天,反复查询其他api时,发现高德地图有一个api,为地理编码,简单来说就是根据你给出的地区名字,就可以返回这个城市自身及包含区域的所有区域编码。怎么注册高德地图api这里就不赘述了,可以去高德地图的官网注册查看

可是后续我在使用两个api的时候,发现了一个新的问题,我要怎么在一个类里面相应两次不同的网址,因为觉得在建一个新的类,有点多余了,我觉得这个思路蛮简单的,如果有大佬有更好的方法,欢迎在评论区交流,以下是我的思路和代码。

	String city;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.activity_weather, container, false);
        Bundle bundle = getArguments();
        city = bundle.getString("city");
        //根据高德地图api获取传入地区的地理编码
        String cityC = "https://restapi.amap.com/v3/config/district?key=YouKey="+city;
        loadData(cityC);
        return view;
    }

    String cityCode;
    boolean isCode;

    //网站相应成功
    @Override
    public void onSuccess(String result) {
        isCode = !isCode;
        if(isCode){
            //根据高德地图返回的json转为Object
            CityGson cityGson = new Gson().fromJson(result,CityGson.class);
            //此处判断是因为我发现直辖市的第一个地区编码是整体的,在百度天气无法查到,所以我们需要获取中心区域的地区编码来进行查询
            this.cityCode = (cityGson.districts.size() > 1)?cityGson.districts.get(1).getAdcode():cityGson.districts.get(0).getAdcode();
            //根据获取到的地区编码来进行天气获取
            String url = "https://api.map.baidu.com/weather/v1/?district_id="+cityCode+"&data_type=all&ak=YouAK&mcode=YouMcode;YouMainClass";
            loadData(url);
        }else{
            //根据百度地图的api返回json进行解析
            parseShowData(result);
        }
    }
    
    @Override
    public void onError(Throwable ex, boolean isOnCallback) {
        Log.e("", "onError: ", ex);
    }

    public void loadData(String path){
        RequestParams params = new RequestParams(path);
        x.http().get(params,this);
    }
举报

相关推荐

0 条评论