JAVA http请求接口数据

来源:互联网 发布:java replace的原理 编辑:程序博客网 时间:2024/06/06 09:04

本次以访问百度地图服务API 为例 

 编写访问程序 

一、解析url 方法  把返回数据 封装成StringBuffer 字符串

public static StringBuffer httpsRequest(String requestUrl, String requestMethod, String output) throws IOException,

        UnsupportedEncodingException {

    URL url = new URL(requestUrl);

    if (requestUrl.startsWith("https")) {

        HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();

        connection.setDoOutput(true);

        connection.setDoInput(true);

        connection.setUseCaches(false);

        connection.setRequestMethod(requestMethod);

        if (null != output) {

            OutputStream outputStream = connection.getOutputStream();

            outputStream.write(output.getBytes("UTF-8"));

            outputStream.close();

        }

        // 从输入流读取返回内容

        InputStream inputStream = connection.getInputStream();

        InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");

        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

        String str = null;

        StringBuffer buffer = new StringBuffer();

        while ((str = bufferedReader.readLine()) != null) {

            buffer.append(str.trim());

        }

        bufferedReader.close();

        inputStreamReader.close();

        inputStream.close();

        inputStream = null;

        connection.disconnect();

        return buffer;

    } else {

        HttpURLConnection connection = (HttpURLConnection) url.openConnection();

        connection.setDoOutput(true);

        connection.setDoInput(true);

        connection.setUseCaches(false);

        connection.setRequestMethod(requestMethod);

        if (null != output) {

            OutputStream outputStream = connection.getOutputStream();

            outputStream.write(output.getBytes("UTF-8"));

            outputStream.close();

        }

        // 从输入流读取返回内容

        InputStream inputStream = connection.getInputStream();

        InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");

        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

        String str = null;

        StringBuffer buffer = new StringBuffer();

        while ((str = bufferedReader.readLine()) != null) {

            buffer.append(str.trim());

        }

        bufferedReader.close();

        inputStreamReader.close();

        inputStream.close();

        inputStream = null;

        connection.disconnect();

        return buffer;

    }

}

二、调用解析方法 处理接口返回数据

/**
 * 地铁信息类
 * @return
 */
public class StationInfo {
    private String stationName;
    private String lng;
    private String lat;
    private String subway;
    public String getStationName() {
        return stationName;
    }
    public void setStationName(String stationName) {
        this.stationName = stationName;
    }
    public String getLng() {
        return lng;
    }
    public void setLng(String lng) {
        this.lng = lng;
    }
    public String getLat() {
        return lat;
    }
    public void setLat(String lat) {
        this.lat = lat;
    }
    public String getSubway() {
        return subway;
    }
    public void setSubway(String subway) {
        this.subway = subway;
    } 
}
/**
 * 根据经纬度,及其范围距离来获取地铁站点集合
 * @param lng
 * @param lat
 * @param range
 * @return
 */
public List<StationInfo> getStationByLngLat(String lng, String lat, int range){
    int radius=range;//搜索的半径范围  
    String url="http://api.map.baidu.com/place/v2/search?query=地铁站&page_size=10&page_num=0&scope=1&location="+lat+","+lng+"&radius="+radius+"&output=json&ak={百度服务API秘钥}";
    List<StationInfo> list=new ArrayList<StationInfo>();
    try {
        //  System.out.println(HttpConnectionUtil.httpsRequest(url, "GET", null).toString());
        JSONObject jsonObject= JSONObject.fromObject( HttpConnectionUtil.httpsRequest(url, "GET", null).toString());
       // System.out.println("我是:"+jsonObject.get("results"));
        // System.out.println("我是2:"+jsonObject.get("total"));
        JSONArray arrays=jsonObject.getJSONArray("results");
        if(arrays==null){//如果没有则返回空
            return null;
        }
        if(arrays.size()>0){
            for (int i=0;i<arrays.size();i++){
                StationInfo stationInfo=new StationInfo();
                JSONObject jsonObject1=JSONObject.fromObject(arrays.getJSONObject(i));
                stationInfo.setLat(jsonObject1.getJSONObject("location").get("lat").toString());
                stationInfo.setLat(jsonObject1.getJSONObject("location").get("lng").toString());
                stationInfo.setStationName(jsonObject1.get("name").toString());
                String subwayStr=jsonObject1.get("address").toString();
                String[] subways=subwayStr.split(";");
                stationInfo.setSubway(subways[0]);
                list.add(stationInfo); 
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return list;
}
      
/**
 * 调用方法查看结果
 */
public static void main(String[] args) throws Exception {
    String lat = "39.915"; 
    String lng = "116.404";  
    Integer radius = 500; // 圆形区域大小
    MapUtil mapUtil = new MapUtil();
    List<StationInfo> list = mapUtil.getStationByLngLat(lng, lat, radius);
    for (StationInfo temp : list) {
        System.out.println(temp.getStationName());
    }
}
0 0