本文实例讲述了Android编程实现根据经纬度查询地址并对获取的json数据进行解析的方法。分享给大家供大家参考,具体如下:

第一步:根据指定的URL从google 服务器上获得包含地址的json格式的数据(其还提供xml格式的,但json解析效率比xml高)
private static StringBuffer getJSONData(String urlPath){
try {
URL url = new URL(urlPath);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setReadTimeout(5000);
httpURLConnection.setRequestMethod("GET");
if(httpURLConnection.getResponseCode() == 200){
InputStream inputStream = httpURLConnection.getInputStream();
InputStreamReader isr = new InputStreamReader(inputStream);
BufferedReader br = new BufferedReader(isr);
String temp = null;
StringBuffer jsonsb = new StringBuffer();
while((temp = br.readLine()) != null){
jsonsb.append(temp);
}
return jsonsb;
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
传入经纬度作为参数
/**
* 根据经纬度获得地址
* @param latitude
* @param longitude
* @return
*/
public static StringBuffer getCurrentAddressByGPS(long latitude,long longitude){
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(GOOGLE_GPS_PREFIX).append(latitude).append(",")
.append(longitude).append(GOOGLE_GPS_SUFFIX);
return getJSONData(stringBuffer.toString());
}
第三,解析json数据:
public static boolean parseAddressJSON(StringBuffer sb){
try {
if(sb != null){
JSONObject jsonAllData = new JSONObject(sb.toString());
/**
* 获得一个长度为1的JSON数组,如:[{数据内容}]
*/
String placemarkStr = jsonAllData.getString("Placemark");
/**
* 将placemarkStr数组类型字符串构造成一个JSONArray对象
*/
JSONArray placemarkArray = new JSONArray(placemarkStr);
/**
* Placemark标签内容是一个长度为1的数组,获得数组的内容并转换成字符串
*/
String jsonDataPlacemarkStr = placemarkArray.get(0).toString();
/**
* 对上面得到的JSON数据类型的字符串(jsonDataPlacemarkStr)进行解析
*/
JSONObject jsonDataPlacemark = new JSONObject(jsonDataPlacemarkStr);
/**
* 获得标签AddressDetails的JSON数据
*/
String jsonAddressDetails = jsonDataPlacemark.getString("AddressDetails");
/**
* 对上面得到的JSON数据类型的字符串(jsonAddressDetails)进行解析
*/
JSONObject jsonDataAddressJDetails = new JSONObject(jsonAddressDetails);
/**
* 获得标签Country的JSON数据
*/
String jsonCountry = jsonDataAddressJDetails.getString("Country");
/**
* 对上面得到的JSON数据类型的字符串(jsonCountry)进行解析
*/
JSONObject jsonDataCountry = new JSONObject(jsonCountry);
/**
* 对解析出来的感兴趣的数据进行封装
*/
LewatekGPSAddress lewatekGPSAddress = new LewatekGPSAddress();
/**
* 设置CountryName
*/
lewatekGPSAddress.setCountryName(jsonDataCountry.getString("CountryName"));
/**
* 设置CountryNameCode
*/
lewatekGPSAddress.setCountryNameCode(jsonDataCountry.getString("CountryNameCode"));
/**
* 获得标签AdministrativeArea的JSON数据
*/
String jsonAdministrativeArea = jsonDataCountry.getString("AdministrativeArea");
/**
* 对上面得到的JSON数据类型的字符串(jsonAdministrativeArea)进行解析
*/
JSONObject jsonDataAdministrativeArea = new JSONObject(jsonAdministrativeArea);
/**
* 设置AdministrativeAreaName
*/
lewatekGPSAddress.setAdministrativeAreaName(jsonDataAdministrativeArea.getString("AdministrativeAreaName"));
/**
* 获得标签Locality的JSON数据
*/
String jsonLocality = jsonDataAdministrativeArea.getString("Locality");
/**
* 对上面得到的JSON数据类型的字符串(jsonLocality)进行解析
*/
JSONObject jsonDataLocality = new JSONObject(jsonLocality);
/**
* 设置LocalityName
*/
lewatekGPSAddress.setLocalityName(jsonDataLocality.getString("LocalityName"));
/**
* 获得标签DependentLocality的JSON数据
*/
String jsonDependentLocality = jsonDataLocality.getString("DependentLocality");
/**
* 对上面得到的JSON数据类型的字符串(jsonDependentLocality)进行解析
*/
JSONObject jsonDataDependentLocality = new JSONObject(jsonDependentLocality);
lewatekGPSAddress.setDependentLocalityName(jsonDataDependentLocality.getString("DependentLocalityName"));
Log.e(TAG,lewatekGPSAddress.toString());
return true;
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
从google服务器上获得的json数据(提取对我有用的数据:CountryName、LocalityName、AdministrativeAreaName、DependentLocalityName,即中国上海市上海市浦东新区(中国湖南省衡阳市衡山县这样的数据也能提取)):
{
"name": "31.20322202833381,121.59876351250254",
"Status": {
"code": 200,
"request": "geocode"
},
"Placemark": [ {
"id": "p1",
"address": "中国上海市浦东新区祖冲之路994号-1088号",
"AddressDetails": {
"Accuracy" : 8,
"Country" : {
"AdministrativeArea" : {
"AdministrativeAreaName" : "上海市",
"Locality" : {
"DependentLocality" : {
"DependentLocalityName" : "浦东新区",
"Thoroughfare" : {
"ThoroughfareName" : "祖冲之路994号-1088号"
}
},
"LocalityName" : "上海市"
}
},
"CountryName" : "中国",
"CountryNameCode" : "CN"
}
},
"ExtendedData": {
"LatLonBox": {
"north": 31.2070152,
"south": 31.2007199,
"east": 121.6018752,
"west": 121.5955799
}
},
"Point": {
"coordinates": [ 121.5986103, 31.2038252, 0 ]
}
} ]
}
Value [{"id":"p1","ExtendedData":{"LatLonBox":{"south":31.2007199,"west":121.5955799,"east":121.6018752,"north":31.2070152}},"address":"中国上海市浦东新区祖冲之路994号-1088号","Point":{"coordinates":[121.5986103,31.2038252,0]},"AddressDetails":{"Country":{"CountryNameCode":"CN","CountryName":"中国","AdministrativeArea":{"Locality":{"LocalityName":"上海市","DependentLocality":{"DependentLocalityName":"浦东新区","Thoroughfare":{"ThoroughfareName":"祖冲之路994号-1088号"}}},"AdministrativeAreaName":"上海市"}},"Accuracy":8}}] at Placemark of type org.json.JSONArray cannot be converted to JSONObject
PS:这里再为大家推荐几款比较实用的json在线工具供大家参考使用:
在线JSON代码检验、检验、美化、格式化工具:
http://tools./code/json
JSON在线格式化工具:
http://tools./code/jsonformat
在线XML/JSON互相转换工具:
http://tools./code/xmljson
json代码在线格式化/美化/压缩/编辑/转换工具:
http://tools./code/jsoncodeformat
C语言风格/HTML/CSS/json代码格式化美化工具:
http://tools./code/ccode_html_css_json
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android操作json格式数据技巧总结》、《Android数据库操作技巧总结》、《Android编程之activity操作技巧总结》、《Android文件操作技巧汇总》、《Android开发入门与进阶教程》、《Android资源操作技巧汇总》、《Android视图View技巧总结》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。
# Android
# 经纬度
# 查询地址
# 获取
# json数据
# 解析
# Android通过原生方式获取经纬度与城市信息的方法
# Android GPS获取当前经纬度坐标
# Android通过原生APi获取所在位置的经纬度
# Android获取当前位置的经纬度数据
# android通过gps获取定位的位置数据和gps经纬度
# Android获取经纬度计算距离介绍
# Android 通过当前经纬度获得城市的实例代码
# android手机获取gps和基站的经纬度地址实现代码
# Android获取经纬度的完美解决方案
# 上海市
# 浦东新区
# 中国
# 操作技巧
# 祖冲之
# 衡山县
# 感兴趣
# 衡阳市
# 转换工具
# 长度为
# 是一个
# 进阶
# 器上
# 对我
# 相关内容
# 湖南省
# 也能
# 给大家
# 并对
# 更多关于
相关文章:
深圳企业网站制作设计,在深圳如何网上全流程注册公司?
制作充值网站的软件,做人力招聘为什么要自己交端口钱?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
免费ppt制作网站,有没有值得推荐的免费PPT网站?
网站代码制作软件有哪些,如何生成自己网站的代码?
电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?
,交易猫的商品怎么发布到网站上去?
建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析
建站之星如何实现网站加密操作?
如何在宝塔面板创建新站点?
湖北网站制作公司有哪些,湖北清能集团官网?
高性能网站服务器配置指南:安全稳定与高效建站核心方案
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
清除minerd进程的简单方法
如何高效完成独享虚拟主机建站?
如何在建站主机中优化服务器配置?
建站之星与建站宝盒如何选择最佳方案?
简易网站制作视频教程,使用记事本编写一个简单的网页html文件?
微课制作网站有哪些,微课网怎么进?
教学论文网站制作软件有哪些,写论文用什么软件
?
如何快速启动建站代理加盟业务?
如何配置支付宝与微信支付功能?
建站主机类型有哪些?如何正确选型
宝塔面板创建网站无法访问?如何快速排查修复?
如何获取PHP WAP自助建站系统源码?
如何在Windows环境下新建FTP站点并设置权限?
陕西网站制作公司有哪些,陕西凌云电器有限公司官网?
建站主机服务器选型指南与性能优化方案解析
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
简历在线制作网站免费,免费下载个人简历的网站是哪些?
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
济南专业网站制作公司,济南信息工程学校怎么样?
html制作网站的步骤有哪些,iapp如何添加网页?
网站制作的步骤包括,正确网址格式怎么写?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
网站制作培训多少钱一个月,网站优化seo培训课程有哪些?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
全景视频制作网站有哪些,全景图怎么做成网页?
小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?
Swift中switch语句区间和元组模式匹配
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
C#如何使用XPathNavigator高效查询XML
Python lxml的etree和ElementTree有什么区别
佛山企业网站制作公司有哪些,沟通100网上服务官网?
魔毅自助建站系统:模板定制与SEO优化一键生成指南
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
网站制作企业,网站的banner和导航栏是指什么?
制作公司内部网站有哪些,内网如何建网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。