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.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程序设计有所帮助。

时间: 2025-01-29 23:20:35

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

Android Studio获取网络JSON数据并处理的方法

本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下 1.需要的网络JSON数据 2.数据实现类 package chenglong.activitytest.pengintohospital.entity; import org.json.JSONException; import org.json.JSONObject; /** * * 科室 * Created by LICHENGLONG on 2017-10-02. */ public class Bas

Android 链接服务器获取json数据,解析头像url后。。。

问题描述 Android 链接服务器获取json数据,解析头像url后... Android 刚进入页面,链接服务器获取json数据,解析图片url,然后联网加载头像图片的操作得不到头像.代码如下.向各位请教.新手,不知道哪里出问题了.JsonObjectRequest request=new JsonObjectRequest(Request.Method.POST url null new Listener() { @Override public void onResponse(JSONO

Android中使用百度地图API:根据经纬度查询地址信息

百度地图移动版API不仅包含构建地图的基本接口,还集成了众多搜索服务,包括:位置检索.周边检索. 范围检索.公交检索.驾乘检索.步行检索.地址信息查询等. 百度地图移动版API提供的搜索服务主要是 通过初始化MKSearch类,注册搜索结果的监听对象MKSearchListener来实现异步搜索服务.首先需要自定义一 个MySearchListener类,它实现MKSearchListener接口,然后通过实现接口中不同的回调方法,来获得对应的 搜索结果.MySearchListener类的定义

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

首先客户端从服务器端获取json数据 1.利用HttpUrlConnection 复制代码 代码如下: /**      * 从指定的URL中获取数组      * @param urlPath      * @return      * @throws Exception      */     public static String readParse(String urlPath) throws Exception {                  ByteArrayOutputSt

Android中使用Gson解析JSON数据的两种方法_Android

Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率. 从结构上看,所有的数据(data)最终都可以分解成三种类型: 第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"北京"这个单独的词. 第二种类型是序列(sequence),也就是若干个相关的数据按照一定顺序并列在一起,又叫做数组(array)或列表(List),比如"北京,上海". 第三种类型是映射(mapping),也就是一个名/值对(

Android中使用Gson解析JSON数据的两种方法

Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率. 从结构上看,所有的数据(data)最终都可以分解成三种类型: 第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"北京"这个单独的词. 第二种类型是序列(sequence),也就是若干个相关的数据按照一定顺序并列在一起,又叫做数组(array)或列表(List),比如"北京,上海". 第三种类型是映射(mapping),也就是一个名/值对(

接口-怎么判断Android编程中出现的各种错误情况?

问题描述 怎么判断Android编程中出现的各种错误情况? 比如请求json数据接口,返回一个json数组,首先要判断message对象中的obj是否为null,然后转换为String去做json数组解析,解析过程中还要判断异常,解析成一个List后,还要判断list是否为null或size是否为0,再都检查完后才能做正确的UI操作,感觉好繁琐,请问有没有便捷的方法,或者说哪些步骤是可以省略的? 解决方案 这些都是一步一步的,也是有必要的,比如你不判断,如果message对象中的obj为空,或者

Android编程学习之异步加载图片的方法_Android

本文实例讲述了Android编程学习之异步加载图片的方法.分享给大家供大家参考,具体如下: 最近在android开发中碰到比较棘手的问题,就是加载图片内存溢出.我开发的是一个新闻应用,应用中用到大量的图片,一个界面中可能会有上百张图片.开发android应用的朋友可能或多或少碰到加载图片内存溢出问题,一般情况下,加载一张大图就会导致内存溢出,同样,加载多张图片内存溢出的概率也很高. 列一下网络上查到的一般做法: 1.使用BitmapFactory.Options对图片进行压缩 2.优化加载图片的

Android编程学习之抽象类AbsListView用法实例分析_Android

本文实例讲述了Android编程学习之抽象类AbsListView用法.分享给大家供大家参考,具体如下: 一.继承关系 public abstract class AbsListView extends AdapterView <T extendsAdapter> java.lang.Object          android.view.View                android.view.ViewGroup                       android.widg