Android编程实现根据经纬度查询地址并对获取的json数据进行解析的方法

Android编程实现根据经纬度查询地址并对获取的json数据进行解析的方法,第1张

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

本文实例讲述了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数据进行解析的方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1146776.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存