错误描述
给以企业做的app中内嵌了通过gps地址信息转换为实际的地址的功能,使用了百度地图的Geocoding 功能,从上周三开始,陆续有用户反馈,使用定位出现无法获取地址信息的错误,一开始小范围,还以为是用户自己的问题,没有在意,但是到了周四的时候,就开始大面积的爆发了;
解决方法
查找下是不是百度api发生变更
因为近期android app没有做任何更新,所以怀疑是不是baidu的api发生了修改,但是看了下文档,也没有发生变更,而且按照baidu之前的习惯应该是可以向下兼容的;
看下是不是key过期了
登陆百度map的api管理控制台,看了下key没有过期,并且通过代码也是可以访问的;
更换了key之后,调用后,问题依旧;
检查android代码
1、检查了下调用的代码,发现是使用httpget方式进行获取,就考虑换个post方法看看是不是能够解决问题;
2、替换为httppost方式之后,问题得到解决,可以确认是baidu修改了该api的获取方式,拒绝了get方式活着拒绝了android代码里面httpget方式;
public static String getUrlData(String url)
throws Exception {
int returnCode = 0;
url = checkURL(url);
HttpGet get = new HttpGet(url);
String strResult = “”;
HttpParams httpParams = new BasicHttpParams();
ConnManagerParams.setTimeout(httpParams, 3000);get.setHeader(“text/html;charset”, “utf-8″);
ConnManagerParams.setTimeout(httpParams, 3000);
HttpConnectionParams.setConnectionTimeout(httpParams, 4000);
HttpConnectionParams.setSoTimeout(httpParams, 8000);
SchemeRegistry schReg = new SchemeRegistry();
schReg.register(new Scheme(“http”, PlainSocketFactory
.getSocketFactory(), 80));/* ʹ���̰߳�ȫ�����ӹ���������HttpClient */
ClientConnectionManager conMgr = new ThreadSafeClientConnManager(
httpParams, schReg);
HttpClient httpClient = new DefaultHttpClient(conMgr, httpParams);//HttpClient httpClient =new DefaultHttpClient();
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″);//String result = EntityUtils.toString(response.getEntity(),”UTF-8″);
KonkaLog.i(response.getAllHeaders().toString());
for(int i=0;i<response.getAllHeaders().length;i++){
KonkaLog.i(response.getAllHeaders()[i].getName(),response.getAllHeaders()[i].getValue());
}
com.easybiz.util.KonkaLog.i(“postUrlData”, strResult );return strResult;
}else{
com.easybiz.util.KonkaLog.i(“postUrlData”, returnCode + “”);
return “”+returnCode;
}
}catch(Exception e){
return “发生未知错误”;
}
}
public static String postUrlData(String url)
throws Exception {
int returnCode = 0;
url = checkURL(url);
HttpPost post = new HttpPost(url);
String strResult = “”;
HttpClient httpClient = new DefaultHttpClient();HttpResponse response = httpClient.execute(post);
returnCode = response.getStatusLine().getStatusCode();
if(returnCode == 200){
strResult =EntityUtils.toString(response.getEntity());
com.easybiz.util.KonkaLog.i(“postUrlData”, strResult );
ErrorCode = 200;
return strResult;}else{
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<NameValuePair> params)
throws Exception {
int returnCode = 0;
url = checkURL(url);
HttpPost post = new HttpPost(url);String strResult = “”;
com.easybiz.util.KonkaLog.i(“postUrlData”, params.toString() );
post.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
HttpParams httpParams = new BasicHttpParams();ConnManagerParams.setTimeout(httpParams, 3000);
ConnManagerParams.setTimeout(httpParams, 3000);
HttpConnectionParams.setConnectionTimeout(httpParams, 120000);
HttpConnectionParams.setSoTimeout(httpParams, 120000);
SchemeRegistry schReg = new SchemeRegistry();
schReg.register(new Scheme(“http”, PlainSocketFactory.getSocketFactory(), 80));
ClientConnectionManager conMgr = new ThreadSafeClientConnManager(
httpParams, schReg);
HttpClient httpClient = new DefaultHttpClient(conMgr, httpParams);//HttpClient httpClient =new DefaultHttpClient();
try{HttpResponse response = httpClient.execute(post);
returnCode = response.getStatusLine().getStatusCode();
strResult =EntityUtils.toString(response.getEntity());
if(returnCode == 200){com.easybiz.util.KonkaLog.i(“postUrlData”, strResult );
return strResult;}else{
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或数据连接是否正常”;
}
}
method_url = method_url +”?output=json” + “&ak=Dlwp0PmEQQKyFBBntHGSLljM” + “&location=” + loc.getLatitude()+”,”+loc.getLongitude();
strresult = HttpComm.getUrlData(method_url));//公用方法调用见上面将此处修改为
strresult = HttpComm.postUrlData(method_url));//公用方法调用见上面
3、但是修改为post方法后,发现会出现10次调用,有3次会出现失败,再次检查代码,发现还是实用得得httppost的方式不对,换成标准方式,问题得到解决;
method_url = method_url +”?output=json” + “&ak=Dlwp0PmEQQKyFBBntHGSLljM” + “&location=” + loc.getLatitude()+”,”+loc.getLongitude();
strresult = HttpComm.postUrlData(method_url));//公用方法调用见上面将此处修改为
ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
BasicNameValuePair baseValuePair = new BasicNameValuePair(“output”,”json”);
params.add(baseValuePair);
baseValuePair = new BasicNameValuePair(“location”,loc.getLatitude()+”,”+loc.getLongitude());
params.add(baseValuePair);
baseValuePair = new BasicNameValuePair(“ak”,”Dlwp0PmEQQKyFBBntHGSLljM”);
params.add(baseValuePair);strresult = HttpComm.postUrlData(method_url,params );
====================================================
欢迎关注我的微信号@it51share
欢迎加入:179203853(安徽微信开发群)
====================================================
与本文相关的文章
相关推荐
本文将深入探讨如何使用C#结合百度地图API来获取用户的经纬度,并根据这些经纬度确定其所在地理位置。 首先,我们需要了解百度地图API的基本概念。百度地图API是百度提供的一套接口,允许开发者在其应用程序中集成...
在实际应用中,你需要替换YOUR_API_KEY为你从百度地图开放平台获取的API密钥。此外,"location"参数应由用户的实际位置经纬度替换,这可以通过CoreLocation框架获取。 POSTDemo项目可能包含了这个功能的完整实现,...
在JavaScript(js)编程中,使用百度地图API可以轻松实现实时定位用户当前位置,并获取其精确的经度和纬度信息。这篇内容将详细介绍如何利用百度地图API来完成这一任务。 首先,要使用百度地图API,你需要在百度...
在百度地图API中,这一功能通常通过“逆地理编码”服务实现。逆地理编码(Reverse Geocoding)是相对于地理编码(Geocoding)的,后者是将经纬度转换为地址信息。百度地图API提供了逆地理编码接口,允许开发者通过...
在本文中,我们将深入探讨如何使用Delphi编程语言调用百度地图API,创建实用的应用程序。百度地图API提供了丰富的地理定位、地图展示、路径规划等功能,对于开发人员来说,是构建地理位置相关应用的重要工具。 首先...
2. **API请求与响应**:使用DELPHI的HTTPClient组件,我们可以发送GET或POST请求到百度地图API服务器。例如,获取地理位置信息,我们可能需要调用“geocoding”服务,将地址转换为经纬度坐标。 3. **显示轨迹**:...
在Java编程环境中,批量获取百度地图坐标是一项常见的地理信息系统(GIS)任务,它涉及到网络请求、数据解析以及地理编码技术。下面将详细讲解这个过程涉及的知识点。 首先,我们需要了解百度地图API。百度地图提供...
本篇内容将深入讲解如何利用百度地图API来实现这一功能,特别是针对“导航”场景,如标题所提及的“百度地图——导航(地理编码输入地址获取经纬度)”。 首先,我们需要了解百度地图API。百度地图开放平台提供了...
HttpGet httpGet = new HttpGet("http://api.map.baidu.com/geocoding/v3/?address=北京市百度大厦&output=json&ak=你的API密钥"); CloseableHttpResponse response = httpClient.execute(httpGet); // 处理响应,...
在Java开发中,调用百度地图API是一种常见的需求,它涉及到地理位置服务,如地址解析、GPS定位以及地图显示等功能。以下是一些关于如何在Java中使用百度地图API的关键知识点: 1. **百度地图API接入**:首先,你...
百度地图API是一个强大的工具,它允许开发者通过集成到自己的应用程序中,获取到精确的地理位置信息。下面将详细介绍这个过程中的关键知识点。 首先,你需要了解什么是API(Application Programming Interface)。...
在IT行业中,地理信息系统(GIS)是一个非常重要的领域,而百度地图作为国内主流的地图服务提供商,为我们提供了丰富的API和工具来获取和使用地理位置信息。在这个主题中,我们将深入探讨如何利用百度地图API来查询...
在这个"易语言-易语言利用百度地图API查询"的项目中,我们将探讨如何使用易语言与百度地图API进行交互,获取地图相关的信息。 首先,我们需要理解什么是API(Application Programming Interface)。API是软件之间的...
本篇文章将深入探讨如何在Winform中调用百度地图API,实现经纬度定位功能。 首先,我们需要了解什么是百度地图API。百度地图API是一套提供给开发者使用的Web服务接口,它允许开发者在自己的网站或应用程序中嵌入...
在Java中调用百度地图API进行反地理编码,我们需要以下步骤: 1. **申请API Key**:首先,你需要在百度地图开放平台(http://lbsyun.baidu.com/)注册一个账号,创建应用并获取API Key。这个Key将在请求中作为身份...
在Python编程中,调用百度地图API可以帮助我们处理与地理信息相关的任务,如经纬度转换和绘制热力地图。本指南将详细介绍如何使用Python来实现这些功能,通过百度地图API,我们可以获取到丰富的地理信息数据。 首先...
"百度API获取经纬度与城市"是一个经典的主题,它涉及到网络请求、API接口调用以及地理编码等概念。以下将详细讲解这些知识点。 首先,经纬度是地球上任何位置的地理坐标系统,经度表示东西方向的位置,纬度表示南北...
综上所述,开发“百度地图路线导航”涉及到的技术点包括C#编程、网络请求、JSON解析、地图API调用、以及地图上的图形元素绘制等。理解并掌握这些知识点,将有助于构建一个高效、用户体验良好的地图导航应用。在实际...
本文将详细介绍如何使用百度API获取行政区划的经纬度,以及这一过程中的关键知识点。 首先,我们要了解百度地图API。百度地图API是百度提供的一套开放接口,用于在网页或应用程序中集成地图功能。它提供了丰富的...
百度地图API是百度提供的服务,允许开发者通过编程方式访问和使用百度地图的各种功能,如定位、路线规划、地图展示等。它提供了一系列的接口,开发者可以通过HTTP请求调用这些接口,获取所需的数据。 2. **地理...