本文实例讲述了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在线工具供大家参考使用:

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

总结

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

小编个人微信号 jb51ccc

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

android通过经纬度获取地址,Android编程实现根据经纬度查询地址并对获取的json数据进行解析的方法...相关推荐

  1. Android studio获取服务器端json数据并解析

    最近在做Android的一个项目,涉及到Android studio与服务器端通信问题,在网上看了很多,找到了一些解决办法,这篇文章就简单介绍一下如何获取以及向服务器上传json数据. 在这个项目中, ...

  2. android json.out,Android 之 json数据的解析(jsonReader)

    json数据的解析相对而言,还是比较容易的,实现的代码也十分简单.这里用的是jsonReade方法来进行json数据解析. 1.在解析之前,大家需要知道什么是json数据. json数据存储的对象是无 ...

  3. 利用百度APIStoreSDK获取Json数据并解析加载到ListView上

    效果图(这里只是截取了List中的一项): 一.:登录百度ApiStore,获取移动sdk Android版(同时有使用文档和示例),将jar包导入到项目中 Android Studio请在放入lib ...

  4. C#获取http请求的JSON数据并解析

    文章目录 1️⃣ C#获取http请求的JSON数据并解析 1.1 获取http的JSON数据 1.2 解析JSON数据 优质资源分享 C#获取http请求的JSON数据并解析,第一步,先拿到http ...

  5. android通过json获取图片,Android-okhttp获取json数据及解析

    Okhttp简介 okhttp是目前android开发中比较流行的一个开源网络请求框架,相比于官网api提供的网络接口有很多优点. android6.0以前,官方sdk提供的是httpUrlConne ...

  6. android客户端从服务器端获取json数据并解析的实现代码

    2019独角兽企业重金招聘Python工程师标准>>> 首先客户端从服务器端获取json数据 1.利用HttpUrlConnection 代码如下: /** * 从指定的URL中获取 ...

  7. 一个简单的Android客户端从服务器端获取json数据并解析的实现代码

    今天总结一下android客户端从服务器端获取json数据的实现代码,需要的朋友可以参考下 首先客户端从服务器端获取json数据 1.利用HttpUrlConnection 复制代码代码如下: /** ...

  8. android天气查询(二)之网络json数据的获取

    前面一篇文章介绍了如何使用ksoap获取天气信息,但是使用的网络资源受到了限制,所以我们这里会采用第二种方法,可以无限制的获取.http://m.weather.com.cn/data/1010101 ...

  9. Android开发--Json数据的解析

    在执行解析数据之前,需要将一个类库应用到你的程序中,下载的地址是: http://code.google.com/p/google-gson/ 下载解压之后你需要将蓝色标记的文件放入到你的程序之中应用 ...

  10. SpringMVC获取前端传来的json数据的四种方法(前后端json交互总结)

    一.导包 一定要有 Jackson 的jar包依赖,就算有了fastjson,也要有Jackson包 <dependency><groupId>com.fasterxml.ja ...

最新文章

  1. 使用Apache TVM将机器学习编译为WASM和WebGPU
  2. 大一计算机期末考试高数试卷,高等数学大一期末试卷(A)及答案
  3. linux C 学习
  4. vtuber面部捕捉工具_泰国程序员开发VTuber形象生成系统,人人都能当虚拟偶像
  5. 零元学Expression Blend 4 - Chapter 40 Flash做的到的Blend也可以!轻松制作拥有动画的MenuBar!(上)...
  6. ITK:形态分水岭MorphologicalWatershed分割
  7. AI降成本利器!阿里云弹性加速计算实例来了,最高节省50%推理成本
  8. SpringSecurity 权限控制之异常处理流程图
  9. 创建线程的办法 java 1615387415
  10. 简述python常用的函数模块_Python中常用的Python time模块常用函数
  11. Linux下创建虚拟软盘镜像
  12. 测试用例经典练习之微信发红包测试用例
  13. vue后台管理框架配置vux记录
  14. Android信鸽推送全解
  15. 高性能软件系统设计中应该考虑的问题
  16. MySQL单表数据量过大的处理方式经验
  17. 这部纪录片带你重新认识中华神州大地,领略你不知道的中国
  18. 金蝶软件认证显示服务器异常,金蝶提示云服务器异常
  19. Android耗电统计算法
  20. 逆向分析:还原 App protobuf 协议加密

热门文章

  1. UWP 如何阻止WebView自动打开浏览器?
  2. 动态人脸检测(脸数可调)
  3. 全栈开发实战(二)——简易博客社区前端搭建教程(附源码)
  4. Andersen Global宣布进驻印度市场
  5. Mysql支持的数据类型
  6. 智能优化算法:分类、特点和未来
  7. 超五类和六类网线的区别—Vecloud
  8. 刺激战场微信登录更换服务器,刺激战场怎么换微信号登陆 切换微信账号登陆方法...
  9. 如何提高测试工作效率
  10. SPSS实现单因素方差分析