首页 > 系统 > Android > 正文

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

2019-12-12 03:33:36
字体:
来源:转载
供稿:网友

本文实例讲述了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.VeVB.COm/code/json

JSON在线格式化工具:
http://tools.VeVB.COm/code/jsonformat

在线XML/JSON互相转换工具:
http://tools.VeVB.COm/code/xmljson

json代码在线格式化/美化/压缩/编辑/转换工具:
http://tools.VeVB.COm/code/jsoncodeformat

C语言风格/HTML/CSS/json代码格式化美化工具:
http://tools.VeVB.COm/code/ccode_html_css_json

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android操作json格式数据技巧总结》、《Android数据库操作技巧总结》、《Android编程之activity操作技巧总结》、《Android文件操作技巧汇总》、《Android开发入门与进阶教程》、《Android资源操作技巧汇总》、《Android视图View技巧总结》及《Android控件用法总结

希望本文所述对大家Android程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表