1. 程式人生 > >OKHTTP的簡單封裝

OKHTTP的簡單封裝

import android.os.Handler; import org.json.JSONException; import org.json.JSONObject; import java.io.IOException; import java.util.Map; import okhttp3.Callback; import okhttp3.FormBody; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; /** * 嘗試簡單封裝一下OKhttp */
public class OKhttpManager { //定義成員變數 private OkHttpClient mClient; private volatile static OKhttpManager sManager;//防止多個執行緒同時訪問 private static Handler handler;//開啟執行緒互動 這裡的handler 是os包下面的 // 使用構造方法,完成初始化 public OKhttpManager() { mClient=new OkHttpClient(); handler=new
Handler(); } // 使用單例模式,通過獲取的方式拿到物件 public static OKhttpManager getInstance(){ OKhttpManager instance=null; if (sManager==null){ synchronized (OKhttpManager.class){ if (instance==null){ instance=new OKhttpManager(); sManager=instance; } } } return
instance; } // 定義要呼叫的介面 interface Func1{ void onResponse(String result); } interface Func2{ void onResponse(byte [] result); } interface Func3{ void onResponse(JSONObject jsonObject); } // 使編寫的程式碼執行在主執行緒 // 處理請求網路成功的方法,返回的結果是Json串 private static void onSuccessJsonStringMethod(final String jsonValue, final Func1 callBack){ handler.post(new Runnable() { @Override public void run() { if (callBack!=null){ try { callBack.onResponse(jsonValue); }catch (Exception e){ e.printStackTrace(); } } } }); } /** * 返回響應的結果是Json物件 * @param jsonValue * @param callBack */ private void onSuccessJsonObjectMethod(final String jsonValue, final Func3 callBack){ handler.post(new Runnable() { @Override public void run() { if (callBack!=null){ try{ callBack.onResponse(new JSONObject(jsonValue)); }catch(JSONException e){ e.printStackTrace(); } } } }); } /** * 返回響應的結果是byte[]陣列 * @param data * @param callBack */ private void onSuccessByteMethod(final byte[] data,final Func2 callBack){ handler.post(new Runnable() { @Override public void run() { if (callBack!=null){ callBack.onResponse(data); } } }); } // 然後是呼叫方法 /** * 請求指定的url返回的結果是Json * @param url * @param callBack */ public void asyncJsonStringByURL(String url,final Func1 callBack){ final Request request = new Request.Builder().url(url).build(); mClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(okhttp3.Call call, IOException e) { } @Override public void onResponse(okhttp3.Call call, Response response) throws IOException { if (response!=null&&response.isSuccessful()){ onSuccessJsonStringMethod(response.body().string(),callBack); } } }); } /** * 請求返回的是json物件 * * @param url * @param callBack */ public void asyncJsonObjectByURL(String url, final Func3 callBack) { final Request request = new Request.Builder().url(url).build(); mClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(okhttp3.Call call, IOException e) { } @Override public void onResponse(okhttp3.Call call, Response response) throws IOException { if (response != null && response.isSuccessful()) { onSuccessJsonObjectMethod(response.body().string(), callBack); } } }); } /** * 請求返回的是byte位元組陣列 */ public void asyncGetByteByURL(String url, final Func2 callBack) { final Request request = new Request.Builder().url(url).build(); mClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(okhttp3.Call call, IOException e) { } @Override public void onResponse(okhttp3.Call call, Response response) throws IOException { if (response != null && response.isSuccessful()) { onSuccessByteMethod(response.body().bytes(), callBack); } } }); } // 表單提交像一般的姓名和密碼 /** * 表單提交 * @param url * @param params * @param callBack */ public void sendComplexForm(String url, Map<String,String> params,final Func1 callBack){ FormBody.Builder form_builder=new FormBody.Builder();//表單物件包含以input開始的物件以html為主 // 非空鍵值對 if (params != null && !params.isEmpty()) { for(Map.Entry<String,String> entry : params.entrySet()){ form_builder.add(entry.getKey(),entry.getValue()); } } RequestBody request_body = form_builder.build(); Request request = new Request.Builder().url(url).post(request_body).build();//採用post方式提交 mClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(okhttp3.Call call, IOException e) { } @Override public void onResponse(okhttp3.Call call, Response response) throws IOException { if (response!=null&&response.isSuccessful()){ onSuccessJsonStringMethod(response.body().string(), callBack); } } }); } }