百度的地图api中Geocoding故障解决案例以及思路,百度禁止了Geocoding的httpget获取方式 编辑
2020-12-13 16:43
标签:百度地图 登陆百度 android baidu public 给以企业做的app中内嵌了通过gps地址信息转换为实际的地址的功能,使用了百度地图的Geocoding 功能,从上周三开始,陆续有用户反馈,使用定位出现无法获取地址信息的错误,一开始小范围,还以为是用户自己的问题,没有在意,但是到了周四的时候,就开始大面积的爆发了; 因为近期android app没有做任何更新,所以怀疑是不是baidu的api发生了修改,但是看了下文档,也没有发生变更,而且按照baidu之前的习惯应该是可以向下兼容的; 登陆百度map的api管理控制台,看了下key没有过期,并且通过代码也是可以访问的; 更换了key之后,调用后,问题依旧; 1、检查了下调用的代码,发现是使用httpget方式进行获取,就考虑换个post方法看看是不是能够解决问题; 2、替换为httppost方式之后,问题得到解决,可以确认是baidu修改了该api的获取方式,拒绝了get方式活着拒绝了android代码里面httpget方式; public static String getUrlData(String url) get.setHeader(“text/html;charset”, “utf-8″); ConnManagerParams.setTimeout(httpParams, 3000); HttpConnectionParams.setConnectionTimeout(httpParams, 4000); HttpConnectionParams.setSoTimeout(httpParams, 8000); /* HttpClient */ //HttpClient httpClient =new DefaultHttpClient(); //String result = EntityUtils.toString(response.getEntity(),”UTF-8″); return strResult; }else{ public static String postUrlData(String url) HttpResponse response = httpClient.execute(post); }else{ } /** String strResult = “”; com.easybiz.util.KonkaLog.i(“postUrlData”, params.toString() ); ConnManagerParams.setTimeout(httpParams, 3000); ConnManagerParams.setTimeout(httpParams, 3000); HttpConnectionParams.setConnectionTimeout(httpParams, 120000); HttpConnectionParams.setSoTimeout(httpParams, 120000); //HttpClient httpClient =new DefaultHttpClient(); HttpResponse response = httpClient.execute(post); returnCode = response.getStatusLine().getStatusCode(); com.easybiz.util.KonkaLog.i(“postUrlData”, strResult ); }else{ method_url = method_url +”?output=json” + “&ak=Dlwp0PmEQQKyFBBntHGSLljM” + “&location=” + loc.getLatitude()+”,”+loc.getLongitude(); 将此处修改为 strresult = HttpComm.postUrlData(method_url));//公用方法调用见上面 3、但是修改为post方法后,发现会出现10次调用,有3次会出现失败,再次检查代码,发现还是实用得得httppost的方式不对,换成标准方式,问题得到解决; method_url = method_url +”?output=json” + “&ak=Dlwp0PmEQQKyFBBntHGSLljM” + “&location=” + loc.getLatitude()+”,”+loc.getLongitude(); 将此处修改为 ArrayList BasicNameValuePair baseValuePair = new BasicNameValuePair(“output”,”json”); params.add(baseValuePair); baseValuePair = new BasicNameValuePair(“location”,loc.getLatitude()+”,”+loc.getLongitude()); params.add(baseValuePair); strresult = HttpComm.postUrlData(method_url,params ); ==================================================== 欢迎关注我的微信号@it51share 欢迎加入:179203853(安徽微信开发群) ==================================================== HttpURLConnection,Http Clinet,whitch 探索企业移动信息化落地的关键成功因素 移动办公概念恐怕真的要火了! 友盟指数:大屏、高分辨率设备成为流行趋势,女性与低龄用户市场潜力大 jQTouch、jQueryMobile、Sencha Touch、TitaniumMobile四种HTML5移动应用框架的比较 Facebook放弃HTML5的4个原因 Android开发:在EditText中关闭软键盘 Android拍照并保存(对图片进行压缩,分解) Android WebView相关属性 手机浏览器下判断是否安装某app,并判断是否打开该应用 为移动而设计,第一部分:信息架构 CIO最为关注的六大企业移动应用平台 本文出自 “无名程序员” 博客,请务必保留此出处http://wmcxy.blog.51cto.com/2509483/1574842 百度的地图api中Geocoding故障解决案例以及思路,百度禁止了Geocoding的httpget获取方式 编辑 标签:百度地图 登陆百度 android baidu public 原文地址:http://wmcxy.blog.51cto.com/2509483/1574842错误描述
解决方法
查找下是不是百度api发生变更
看下是不是key过期了
检查android代码
throws Exception {
int returnCode = 0;
url = checkURL(url);
HttpGet get = new HttpGet(url);
String strResult = “”;
HttpParams httpParams = new BasicHttpParams();
ConnManagerParams.setTimeout(httpParams, 3000);
SchemeRegistry schReg = new SchemeRegistry();
schReg.register(new Scheme(“http”, PlainSocketFactory
.getSocketFactory(), 80));
ClientConnectionManager conMgr = new ThreadSafeClientConnManager(
httpParams, schReg);
HttpClient httpClient = new DefaultHttpClient(conMgr, httpParams);
try{
HttpResponse response = httpClient.execute(get);
//HttpResponse response = new DefaultHttpClient().execute(get);
returnCode = response.getStatusLine().getStatusCode();
if(returnCode == 200){
strResult =EntityUtils.toString(response.getEntity(),”UTF-8″);
KonkaLog.i(response.getAllHeaders().toString());
for(int i=0;i
}
com.easybiz.util.KonkaLog.i(“postUrlData”, strResult );
com.easybiz.util.KonkaLog.i(“postUrlData”, returnCode + “”);
return “”+returnCode;
}
}catch(Exception e){
return “发生未知错误”;
}
}
throws Exception {
int returnCode = 0;
url = checkURL(url);
HttpPost post = new HttpPost(url);
String strResult = “”;
HttpClient httpClient = new DefaultHttpClient();
returnCode = response.getStatusLine().getStatusCode();
if(returnCode == 200){
strResult =EntityUtils.toString(response.getEntity());
com.easybiz.util.KonkaLog.i(“postUrlData”, strResult );
ErrorCode = 200;
return strResult;
com.easybiz.util.KonkaLog.i(“postUrlData”, returnCode + “”);
ErrorDescript = returnCode+”";
return “”+returnCode;
}
* httppost的公用类
* @param url 地址
* @param params 参数
* @return 返回string类型
* @throws Exception
*/
public static String postUrlData(String url, ArrayList
throws Exception {
int returnCode = 0;
url = checkURL(url);
HttpPost post = new HttpPost(url);
post.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
HttpParams httpParams = new BasicHttpParams();
SchemeRegistry schReg = new SchemeRegistry();
schReg.register(new Scheme(“http”, PlainSocketFactory.getSocketFactory(), 80));
ClientConnectionManager conMgr = new ThreadSafeClientConnManager(
httpParams, schReg);
HttpClient httpClient = new DefaultHttpClient(conMgr, httpParams);
try{
strResult =EntityUtils.toString(response.getEntity());
if(returnCode == 200){
return strResult;
com.easybiz.util.KonkaLog.i(“postUrlData”, returnCode + “”);
ErrorDescript = “登录失败”;
return “”+returnCode;
}
}catch(Exception e){
com.easybiz.util.KonkaLog.i(“postUrlData”, strResult );
e.printStackTrace();
ErrorDescript = “网络连接失败,请检查WIFI或数据连接是否正常”;
return “网络连接失败,请检查WIFI或数据连接是否正常”;
}
}
strresult = HttpComm.getUrlData(method_url));//公用方法调用见上面
strresult = HttpComm.postUrlData(method_url));//公用方法调用见上面
baseValuePair = new BasicNameValuePair(“ak”,”Dlwp0PmEQQKyFBBntHGSLljM”);
params.add(baseValuePair);与本文相关的文章
上一篇:python关于字典的常用方法
下一篇:初识SpringIOC
文章标题:百度的地图api中Geocoding故障解决案例以及思路,百度禁止了Geocoding的httpget获取方式 编辑
文章链接:http://soscw.com/essay/36431.html