轉載請標明出處:http://blog.csdn.net/zhaoyanjun6/article/details/78112856
本文出自【趙彥軍的博客】java
在插件開發過程當中,咱們按照開發一個正式的項目來操做,須要整理一些經常使用工具類。apache
在插件的項目中,咱們看到依賴庫以下圖所示:json
在依賴包中,咱們能夠看到插件中是用了 httpClient 做爲 http 底層鏈接庫,作過 Android 開發的同窗對 httpClient 庫應該很熟悉,在早期的Android開發中,咱們都用 httpClient 作 http 請求,後來被Android 廢棄了。api
另外,在這裏的 Json 解析用的 Gson , 是谷歌官方出品的 Json 解析框架。服務器
下面咱們總結一個 HttpManager 以知足平常的插件開發需求,HttpManager 目前知足的功能有微信
HttpManager.getInstance().get(String url) ; HttpManager.getInstance().get(String url, Map<String, String> params) ;
HttpManager.getInstance().post(String url, Map<String, String> requestParams) ;
HttpManager.getInstance().downloadFile(String url, String destFileName);
若是咱們須要其餘的網絡服務,能夠自行搜索 Httpclient 的其餘功能。網絡
HttpManager 源碼以下所示:app
package com.http; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import java.io.*; import java.net.URI; import java.net.URLEncoder; import java.util.*; public class HttpManager { private static HttpManager ourInstance = new HttpManager(); public static HttpManager getInstance() { return ourInstance; } private HttpManager() { } /** * POST請求 * * @param url * @param requestParams * @return * @throws Exception */ public String post(String url, Map<String, String> requestParams) throws Exception { String result = null; CloseableHttpClient httpClient = HttpClients.createDefault(); /**HttpPost*/ HttpPost httpPost = new HttpPost(url); List params = new ArrayList(); Iterator<Map.Entry<String, String>> it = requestParams.entrySet().iterator(); while (it.hasNext()) { Map.Entry<String, String> en = it.next(); String key = en.getKey(); String value = en.getValue(); if (value != null) { params.add(new BasicNameValuePair(key, value)); } } httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8")); /**HttpResponse*/ CloseableHttpResponse httpResponse = httpClient.execute(httpPost); try { HttpEntity httpEntity = httpResponse.getEntity(); result = EntityUtils.toString(httpEntity, "utf-8"); EntityUtils.consume(httpEntity); } finally { try { if (httpResponse != null) { httpResponse.close(); } } catch (IOException e) { e.printStackTrace(); } } return result; } /** * GET 請求 * * @param url * @param params * @return */ public String get(String url, Map<String, String> params) { return get(getUrlWithQueryString(url, params)); } /** * Get 請求 * * @param url * @return */ public String get(String url) { CloseableHttpClient httpCient = HttpClients.createDefault(); HttpGet httpGet = new HttpGet(); httpGet.setURI(URI.create(url)); String result = null; //第三步:執行請求,獲取服務器發還的相應對象 CloseableHttpResponse httpResponse = null; try { httpResponse = httpCient.execute(httpGet); if (httpResponse.getStatusLine().getStatusCode() == 200) { HttpEntity entity = httpResponse.getEntity(); String response = EntityUtils.toString(entity, "utf-8");//將entity當中的數據轉換爲字符串 result = response.toString(); } } catch (IOException e) { e.printStackTrace(); } finally { if (httpResponse != null) { try { httpResponse.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; } /** * 根據api地址和參數生成請求URL * * @param url * @param params * @return */ private String getUrlWithQueryString(String url, Map<String, String> params) { if (params == null) { return url; } StringBuilder builder = new StringBuilder(url); if (url.contains("?")) { builder.append("&"); } else { builder.append("?"); } int i = 0; for (String key : params.keySet()) { String value = params.get(key); if (value == null) { //過濾空的key continue; } if (i != 0) { builder.append('&'); } builder.append(key); builder.append('='); builder.append(encode(value)); i++; } return builder.toString(); } /** * 下載文件 * * @param url * @param destFileName * @throws ClientProtocolException * @throws IOException */ public boolean downloadFile(String url, String destFileName) { CloseableHttpClient httpclient = HttpClients.createDefault(); HttpGet httpget = new HttpGet(url); HttpResponse response = null; InputStream in = null; try { response = httpclient.execute(httpget); HttpEntity entity = response.getEntity(); in = entity.getContent(); File file = new File(destFileName); FileOutputStream fout = new FileOutputStream(file); int l = -1; byte[] tmp = new byte[1024]; while ((l = in.read(tmp)) != -1) { fout.write(tmp, 0, l); } fout.flush(); fout.close(); return true; } catch (IOException e) { e.printStackTrace(); } finally { // 關閉低層流。 if (in != null) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } try { httpclient.close(); } catch (IOException e) { e.printStackTrace(); } } return false; } /** * 進行URL編碼 * * @param input * @return */ private String encode(String input) { if (input == null) { return ""; } try { return URLEncoder.encode(input, "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return input; } }
根據 Gson 庫進行封裝,具體用法以下:框架
JsonUtil.fromJson(String json, Class<T> classOfT)
JsonUtil.toJson(Object src);
JsonUtil 源碼以下:工具
package com.util; import com.google.gson.Gson; public class JsonUtil { static Gson gson = new Gson() ; /** * json字符串轉對象 * @param json * @param classOfT * @param <T> * @return */ public static <T>T fromJson(String json, Class<T> classOfT){ return gson.fromJson(json,classOfT); } /** * 對象轉json字符串 * @param src * @return */ public static String toJson(Object src){ return gson.toJson(src); } }
Logger 類源碼
package com.util; import com.intellij.notification.*; /** * logger * Created by zhaoyanjun on 15/11/27. */ public class Logger { private static String NAME; private static int LEVEL = 0; public static final int DEBUG = 3; public static final int INFO = 2; public static final int WARN = 1; public static final int ERROR = 0; public static void init(String name,int level) { NAME = name; LEVEL = level; NotificationsConfiguration.getNotificationsConfiguration().register(NAME, NotificationDisplayType.NONE); } public static void debug(String text) { if (LEVEL >= DEBUG) { Notifications.Bus.notify( new Notification(NAME, NAME + " [DEBUG]", text, NotificationType.INFORMATION)); } } public static void info(String text) { if (LEVEL > INFO) { Notifications.Bus.notify( new Notification(NAME, NAME + " [INFO]", text, NotificationType.INFORMATION)); } } public static void warn(String text) { if (LEVEL > WARN) { Notifications.Bus.notify( new Notification(NAME, NAME + " [WARN]", text, NotificationType.WARNING)); } } public static void error(String text) { if (LEVEL > ERROR) { Notifications.Bus.notify( new Notification(NAME, NAME + " [ERROR]", text, NotificationType.ERROR)); } } }
使用
//初始化 Logger.init("zhao" , Logger.DEBUG); //打印 debug 信息 Logger.debug("i am a debug"); //打印info信息 Logger.info("i am a info"); //打印warn信息 Logger.warn("i am a warn"); //打印error信息 Logger.error("i am a error");
在 Android Studio 裏效果以下
下一篇:Android Studio 插件開發詳解三:翻譯插件實戰
我的微信號:zhaoyanjun125 , 歡迎關注