当前位置: 移动技术网 > IT编程>移动开发>Android > Android编程实现根据经纬度查询地址并对获取的json数据进行解析的方法

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

闸坡团购,海岸雄风,王紫绮死刑照片流出

本文实例讲述了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程序设计有所帮助。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网