zoukankan      html  css  js  c++  java
  • 第一个 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("
    ");
                    }
                    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;
        }
    }
    
  • 相关阅读:
    C++闭包到C函数指针转化
    是否使用预编译头文件
    多线程模型一:只完成最新任务
    关于“函数针对入参判空并返回”
    C++函数参数的编写
    .Net Core(二) 下
    微信接口本地调试(IIS服务器)
    .Net Core 学习(二)上篇
    .Net Core学习(一)
    博客园的第一个博客
  • 原文地址:https://www.cnblogs.com/wuzhiblog/p/java_http_get_and_parse_json.html
Copyright © 2011-2022 走看看