我在学习制作天气预报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);
}