第一个 JAVA 程序

第一个自己动手写成的 JAVA 的程序
程序功能是通过高德地图的地理API,将文本格式的地址转换成经纬度。
涉及的知识点有:

  • HTTP GET 请求
  • URL 编码
  • JSON 解析

自己记录一下

import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.net.HttpURLConnection;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.UnsupportedEncodingException;
import com.alibaba.fastjson.JSON;           // 使用阿里巴巴的 fastjson 库
import com.alibaba.fastjson.JSONObject;     // 
import com.alibaba.fastjson.JSONArray;      // 

public class GeoTrans {

    public static void main(String[] args) {
        String latlgt;
        String addr = "海南省海口市秀英区长怡路12号";
        String realxy = null;

        GeoTrans gt = new GeoTrans();
        latlgt = gt.get_xy(addr);

        // 将字符串转换成 JSON 对象
        JSONObject result = JSON.parseObject(latlgt);
        // JSON 中的数组
        JSONArray geocodes = result.getJSONArray("geocodes");
        // 取字段值
        // 字符串数组用 getString() 方法,参数是数字索引值
        // JSON 对象取字符字段值也用 getString() 方法,不过参数是字段字符值
        realxy = JSON.parseObject(geocodes.getString(0)).getString("location");
        System.out.println(realxy);
    }

    public String get_xy(String addr) {
        String base_url = "https://restapi.amap.com/v3/geocode/geo?key=96f7a3de&address=";
        String result = null;
        try {
            // 地址是中文,要 encode 一下
            base_url += URLEncoder.encode(addr, "UTF-8");
        } catch (UnsupportedEncodingException ex) {
            ex.printStackTrace();
        }
        System.out.println(base_url);
        HttpURLConnection conn = null;  // HTTP连接对象
        InputStream is = null;          // 输入流
        BufferedReader br = null;       // 缓冲读取器
        try {
            URL url = new URL(base_url); 
            conn = (HttpURLConnection) url.openConnection();    // 打开一个链接,并转换为 HTTP 连接对象
            conn.setRequestMethod("GET");       // 指定为 GET 请求
            conn.setRequestTimeout(60000);      // 请求超时时间
            conn.setReadTimeout(15000);         // 读取超时时间
            conn.connect();                     // 发起请求

            if (conn.getResponseCode() == 200) {
                is = conn.getInputStream();     // 获取返回的流对象
                br = new BufferedReader(new InputStreamReader(is, "UTF-8"));    // 读取流数据
                StringBuffer sbf = new StringBuffer();      // 字符串乜乜乜
                String temp = null;
                while ((temp = br.readLine()) != null) {    // 只要返回的数据没读完就一直读下去
                    sbf.append(temp);
                    sbf.append("\r\n");
                }
                result = sbf.toString();        // 转换为字符串
            }
        } catch (MalformedURLException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            if (null != br) {
                try {
                    br.close();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
            if (null != is) {
                try {
                    is.close();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }

            conn.disconnect();  // 关闭连接
        }
        return result;
    }
}
posted @ 2019-05-10 22:04  东围居士  阅读(177)  评论(0编辑  收藏  举报