欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2023-12-17 09:43:16
本文实例讲述了android编程实现根据经纬度查询地址并对获取的json数据进行解析的方法。分享给大家供大家参考,具体如下: 第一步:根据指定的url从google 服务...

本文实例讲述了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代码检验、检验、美化、格式化工具:

json在线格式化工具:

在线xml/json互相转换工具:

json代码在线格式化/美化/压缩/编辑/转换工具:

c语言风格/html/css/json代码格式化美化工具:

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

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

上一篇:

下一篇: