本文实例讲述了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,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.jb51.net/code/json
JsON在线格式化工具:
http://tools.jb51.net/code/jsonformat
在线XML/JsON互相转换工具:
http://tools.jb51.net/code/xmljson
Json代码在线格式化/美化/压缩/编辑/转换工具:
http://tools.jb51.net/code/jsoncodeformat
C语言风格/HTML/CSS/Json代码格式化美化工具:
http://tools.jb51.net/code/ccode_html_css_json
更多关于AndroID相关内容感兴趣的读者可查看本站专题:《Android *** 作json格式数据技巧总结》、《Android数据库 *** 作技巧总结》、《Android编程之activity *** 作技巧总结》、《Android文件 *** 作技巧汇总》、《Android开发入门与进阶教程》、《Android资源 *** 作技巧汇总》、《Android视图View技巧总结》及《Android控件用法总结》
希望本文所述对大家AndroID程序设计有所帮助。
总结以上是内存溢出为你收集整理的Android编程实现根据经纬度查询地址并对获取的json数据进行解析的方法全部内容,希望文章能够帮你解决Android编程实现根据经纬度查询地址并对获取的json数据进行解析的方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)