1. 程式人生 > >Android okhttp3封裝

Android okhttp3封裝

Okhttp確實是功能強大,高效率,簡潔的網路請求框架,所以最近專案也集成了改框架,寫了一個Manager管理類,整理下給大家看下。

***
 * 使用OkHttp框架執行網路請求
 *
 */

public class OkHttpManager {
    private static final String TAG = "OkHttpManager";
    //提交json資料
    private static final MediaType JSON = MediaType.parse(
            "application/json;charset=utf-8"
); //提交字串資料 private static final MediaType MEDIA_TYPE_MARKDOWN = MediaType.parse( "text/x-markdown;charset=utf-8"); public final static int CONNECT_TIMEOUT = 60; public final static int READ_TIMEOUT = 100; public final static int WRITE_TIMEOUT = 60; private static OkHttpManager mInstance; private
OkHttpClient mOkHttpClient; private Handler handler; private OkHttpManager() { mOkHttpClient = new OkHttpClient.Builder() .connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS) .readTimeout(READ_TIMEOUT, TimeUnit.SECONDS) .writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS) .build(); handler = new
Handler(Looper.getMainLooper());//主執行緒處理 } public synchronized static OkHttpManager getInstance() { if (mInstance == null) { mInstance = new OkHttpManager(); } return mInstance; } public void getRequest(String url, final ResultCallback callback) { Request request = new Request.Builder().url(url).build(); deliveryResult(callback, request); } private void postRequest(String url, final ResultCallback callback, List<OkHttpParam> params) { Request request = buildPostRequest(url, params); } /** * post非同步請求 * josn引數 * @param url * @param callback * @param json */ private void postRequest(String url, final ResultCallback callback, String json) { Request request = buildPostRequest(url, json); deliveryResult(callback, request); } private void deliveryResult(final ResultCallback callback, Request request) { mOkHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { sendFailCallback(callback, e); } @Override public void onResponse(Call call, Response response) throws IOException { try { sendSuccessCallBack(callback, response); } catch (final Exception e) { sendFailCallback(callback, e); } } }); } /** * 非同步請求 * * @param url * @param callBack */ public void getUrl(String url, final HttpCallBack callBack) { Request request = new Request.Builder().url(url).build(); mOkHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { callBack.onFailure(e); } @Override public void onResponse(Call call, Response response) throws IOException { callBack.onSuccess(response); } }); } /** * 上傳檔案 * * @param url * @param file * @param callback */ public void postFile(String url, File file, Callback callback) { RequestBody fileBody = RequestBody.create(MediaType.parse("application/octet-stream"), file); RequestBody requestBody = new MultipartBody.Builder().addFormDataPart("filename", file.getName(), fileBody).build(); Request requestPostFile = new Request.Builder() .url(url) .post(requestBody) .build(); mOkHttpClient.newCall(requestPostFile).enqueue(callback); } /** * 多個引數請求 * * @param url * @param params * @return */ private Request buildPostRequest(String url, List<OkHttpParam> params) { FormBody.Builder builder = new FormBody.Builder(); for (OkHttpParam param : params) { builder.add(param.key, param.value); } RequestBody formBody = builder.build(); return new Request.Builder().url(url).post(formBody).build(); } /** * json引數 * * @param url * @param json * @return */ private Request buildPostRequest(String url, String json) { RequestBody requestBody = RequestBody.create(JSON, json); return new Request.Builder().url(url).post(requestBody).build(); } private void sendFailCallback(final ResultCallback callback, final Exception e) { handler.post(new Runnable() { @Override public void run() { if (callback != null) { callback.onFailure(e); } } }); } private void sendSuccessCallBack(final ResultCallback callback, final Response response) { handler.post(new Runnable() { @Override public void run() { if (callback != null) { callback.onSuccess(response); } } }); } /** * get請求 * * @param url 請求url * @param callback 請求回撥 */ public static void get(String url, ResultCallback callback) { getInstance().getRequest(url, callback); } public static void get(String url) { get(url, new ResultCallback() { @Override public void onSuccess(Response response) { } @Override public void onFailure(Exception e) { } }); } /** * post請求 * * @param url 請求url * @param callback 請求回撥 * @param params 請求引數 */ public static void post(String url, List<OkHttpParam> params, final ResultCallback callback) { getInstance().postRequest(url, callback, params); } /** * post請求 * * @param url 請求url * @param callback 請求回撥 * @param json 請求json */ public static void post(String url, String json, final ResultCallback callback) { getInstance().postRequest(url, callback, json); } /** * http請求回撥類,回撥方法在UI執行緒中執行 */ public static abstract class ResultCallback { /** * 請求成功回撥 * * @param response */ public abstract void onSuccess(Response response); /** * 請求失敗回撥 * * @param e */ public abstract void onFailure(Exception e); } /** * post請求引數類 */ public static class OkHttpParam { String key; String value; public OkHttpParam() { } public OkHttpParam(String key, String value) { this.key = key; this.value = value; } } /** * 請求回撥介面 */ public interface HttpCallBack { void onSuccess(Response response); void onFailure(Exception e); }