OkHttp简单封装

一世执手 提交于 2020-01-14 01:42:30
public class OkHttpHelper {
    private String TAG = OkHttpHelper.class.getSimpleName();
    private OkHttpClient mOkHttpClient;//okHttpClient 实例
    private static OkHttpHelper mInstance = null;
    private Handler okHttpHandler;//全局处理子线程和M主线程通信

    private static final MediaType MEDIA_TYPE_JSON = MediaType.parse("application/json; charset=utf-8");//mdiatype 这个需要和服务端保持一致

    public interface ReqCallBack<T> {
        /**
         * 响应成功
         */
        void onReqSuccess(T result);

        /**
         * 响应失败
         */
        void onReqFailed(String errorMsg);
    }

    private OkHttpHelper(Context context){
        //初始化OkHttpClient
        mOkHttpClient = new OkHttpClient().newBuilder()
                .connectTimeout(10, TimeUnit.SECONDS)//设置超时时间
                .readTimeout(10, TimeUnit.SECONDS)//设置读取超时时间
                .writeTimeout(10, TimeUnit.SECONDS)//设置写入超时时间
                .build();
        //初始化Handler
        okHttpHandler = new Handler(context.getMainLooper());
    }

    /**
     * 获取单例引用
     *
     * @return
     */
    public static OkHttpHelper getInstance(Context context) {
        OkHttpHelper inst = mInstance;
        if (inst == null) {
            synchronized (OkHttpHelper.class) {
                inst = mInstance;
                if (inst == null) {
                    inst = new OkHttpHelper(context.getApplicationContext());
                    mInstance = inst;
                }
            }
        }
        return inst;
    }

    public void doPost(String url, String jsonParams, final ReqCallBack callBack){
        RequestBody requestBody = RequestBody.create(MEDIA_TYPE_JSON, jsonParams);
        final Request request = new Request.Builder().url(url).post(requestBody).build();
        Call call = mOkHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                failedCallBack("访问失败", callBack);
                Log.e(TAG, e.toString());
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.isSuccessful()) {
                    String string = response.body().string();
                    Log.e(TAG, "response ----->" + string);
                    successCallBack( string, callBack);
                } else {
                    failedCallBack("服务器错误", callBack);
                }
            }
        });
    }

    public Response doPostSync(String url, String jsonParams) throws IOException{
            RequestBody requestBody = RequestBody.create(MEDIA_TYPE_JSON, jsonParams);
            Request request = new Request.Builder().url(url).post(requestBody).build();
            Call call = mOkHttpClient.newCall(request);
            return call.execute();
    }

    public void doGet(String url,final ReqCallBack callBack){
        Request request = new Request.Builder().url(url).build();
        Call call = mOkHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                failedCallBack("error:"+e.getCause(), callBack);
                Log.e(TAG, e.toString());
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.isSuccessful()) {
                    String string = response.body().string();
                    Log.e(TAG, "response ----->" + string);
                    successCallBack( string, callBack);
                } else {
                    failedCallBack("server error: "+response.toString(), callBack);
                }
            }
        });
    }

    public Response doGetSync(String url) throws IOException{
        Request request = new Request.Builder().url(url).build();
        Call call = mOkHttpClient.newCall(request);
        return call.execute();
    }

    /**
     * 统一同意处理成功信息
     * @param result
     * @param callBack
     * @param <T>
     */
    private <T> void successCallBack(final T result, final ReqCallBack<T> callBack) {
        okHttpHandler.post(new Runnable() {
            @Override
            public void run() {
                if (callBack != null) {
                    callBack.onReqSuccess(result);
                }
            }
        });
    }

    /**
     * 统一处理失败信息
     * @param errorMsg
     * @param callBack
     * @param <T>
     */
    private <T> void failedCallBack(final String errorMsg, final ReqCallBack<T> callBack) {
        okHttpHandler.post(new Runnable() {
            @Override
            public void run() {
                if (callBack != null) {
                    callBack.onReqFailed(errorMsg);
                }
            }
        });
    }

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!