httpConnectionPost 實作 === - `HttpUtils.java` - 使用一個 Util 類別來處理 http 的連線,接收兩參數: - `apiUrl` 為 server domain,`string` 格式,Ex:`http://192.168.1.100:8000/rest/test` - `jString` 為自定義物件的 `string` 格式,透過 **[Gson](https://github.com/google/gson)** 將物件轉成 `string` - 結果回傳 `string` 格式,再透過 **Gson** 將 `string` 轉成自定義物件 ```java= public class HttpUtils { private static Logger logger = LoggerFactory.getLogger(FileViewerUtils.class.getName()); public static String httpConnectionPost(String apiUrl, String jString) { HttpURLConnection conn = null; StringBuilder response = new StringBuilder(); try { // server domain URL url = new URL(apiUrl); // 建立要連線的 HttpURLConnection 物件 conn = (HttpURLConnection) url.openConnection(); // 設定 Header 參數 conn.setRequestProperty("Content-Type","application/json; charset=UTF-8"); conn.setRequestProperty("Accept", "application/json"); // 設定連線方法 conn.setRequestMethod("POST"); // 設定雙向溝通 conn.setDoInput(true); // app 端是否接收 server 的回傳結果 conn.setDoOutput(true); // app 端是否傳送資料給 server; if true, connection 會自動將 RequestMethod 設為 POST // 設定等待時間(ms). 等待時間到若 server 無回應則會跳例外 conn.setConnectTimeout(5000); // 其他參數 //conn.setReadTimeout(10000); //conn.setUseCaches(false); DataOutputStream os = new DataOutputStream(conn.getOutputStream()); os.writeBytes(jString); os.flush(); os.close(); /** Get Response */ InputStream is = conn.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); String line; while ((line = reader.readLine()) != null) { response.append(line); response.append('\r'); } reader.close(); } catch (Exception e) { logger.error(String.valueOf(e)); } finally { if(conn != null) { // 關閉連線 conn.disconnect(); } } return response.toString(); } } ``` ## Ref. [[Android]HttpURLConnection 之POST&GET手把手完整教學解析](https://medium.com/%E4%B8%80%E8%B5%B7%E5%8B%95%E6%89%8B%E5%81%9Aandroidapp/android-%E4%BD%BF%E7%94%A8httpurlconnection-%E9%80%B2%E8%A1%8Cpost-get%E9%80%A3%E7%B7%9A-b44c62dedd37) [Android - HttpURLConnection POST Json](https://dotblogs.com.tw/newmonkey48/2017/09/21/152425) [Android网络之HttpUrlConnection和Socket关系图解](https://blog.51cto.com/u_15758326/5610706) ###### tags: `實作相關`