全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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,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获取经纬度的完美解决方案  # 上海市  # 浦东新区  # 中国  # 操作技巧  # 祖冲之  # 衡山县  # 感兴趣  # 衡阳市  # 转换工具  # 长度为  # 是一个  # 进阶  # 器上  # 对我  # 相关内容  # 湖南省  # 也能  # 给大家  # 并对  # 更多关于 


相关文章: 手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  建站之星云端配置指南:模板选择与SEO优化一键生成  广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?  动图在线制作网站有哪些,滑动动图图集怎么做?  建站之星3.0如何解决常见操作问题?  青浦网站制作公司有哪些,苹果官网发货地是哪里?  如何零基础开发自助建站系统?完整教程解析  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  如何高效生成建站之星成品网站源码?  如何设计高效校园网站?  如何快速搭建支持数据库操作的智能建站平台?  Android自定义listview布局实现上拉加载下拉刷新功能  浅析上传头像示例及其注意事项  建站主机数据库如何配置才能提升网站性能?  济南专业网站制作公司,济南信息工程学校怎么样?  建站之星后台管理:高效配置与模板优化提升用户体验  建站主机SSH密钥生成步骤及常见问题解答?  建站之星如何优化SEO以实现高效排名?  建站VPS能否同时实现高效与安全翻墙?  单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?  如何在企业微信快速生成手机电脑官网?  如何快速建站并高效导出源代码?  股票网站制作软件,网上股票怎么开户?  专业网站制作服务公司,有哪些网站可以免费发布招聘信息?  外汇网站制作流程,如何在工商银行网站上做外汇买卖?  黑客如何利用漏洞与弱口令入侵网站服务器?  官网建站费用明细查询_企业建站套餐价格及收费标准指南  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  MySQL查询结果复制到新表的方法(更新、插入)  北京企业网站设计制作公司,北京铁路集团官方网站?  建站主机是什么?如何选择适合的建站主机?  如何在景安服务器上快速搭建个人网站?  魔方云NAT建站如何实现端口转发?  建站之星如何助力企业快速打造五合一网站?  公司网站制作费用多少,为公司建立一个网站需要哪些费用?  如何在IIS服务器上快速部署高效网站?  如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法  如何做静态网页,sublimetext3.0制作静态网页?  台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?  PHP 500报错的快速解决方法  网站制作模板下载什么软件,ppt模板免费下载网站?  ,怎么用自己头像做动态表情包?  网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?  历史网站制作软件,华为如何找回被删除的网站?  如何快速生成凡客建站的专业级图册?  建站之星ASP如何实现CMS高效搭建与安全管理?  如何彻底删除建站之星生成的Banner?  制作旅游网站html,怎样注册旅游网站?  一键制作网站软件下载安装,一键自动采集网页文档制作步骤?  如何在阿里云高效完成企业建站全流程? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。