okhttp的简单封装及使用

首先定义一个接口INetCallBack

public interface INetCallBaek{

           void onSuccess(String response);

            void onFailed(Throwable e);

}

用来返回equeue中的成功失败,再定义一个接口IhttpInvoke

public interface IhttpInvoke {

    void doget(String url, INetCallback callback);

    void dopost(String url, HashMap<String,String> params, INetCallback callback);

    void dopostMutipart(String url,HashMap<String,String> params,INetCallback callback);

    void dopostjson(String url,String jsonstr,INetCallback callback);

}


然后写一个工具类OKHttpUtils,实现IhttpInvoke接口

public class OkhttpUtils implements IhttpInvoke {

    public static OkhttpUtils sInstance = new OkhttpUtils();

    public static OkhttpUtils getInstance(){

        return sInstance;

    }

    private Handler handler = new Handler(Looper.getMainLooper());

    private static OkHttpClient client;

    public OkhttpUtils(){

        HttpLoggingInterceptor logging = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {

            @Override public void log(String message) {

                Log.d("hyx", message);

            }});

        logging.setLevel(HttpLoggingInterceptor.Level.BODY);

        client = new OkHttpClient.Builder()

                .addInterceptor(new HeaderInterceptor())

                .addInterceptor(logging)

                .build();

    }

    @Override

    public void doget(String url, INetCallback callback){

                    Request request = new Request.Builder()

                            .url(url)

                            .get()

                            .build();

        executeRequest(callback, request);

    }

    @Override

    public void dopost(String url, HashMap<String,String> params,INetCallback callback){

        FormBody.Builder formBodybuilder = new FormBody.Builder();

        if (params!=null){

            for (String param : params.keySet()){

                formBodybuilder.add(param,params.get(param));

            }

        }

        Request request = new Request.Builder()

                .url(url)

                .post(formBodybuilder.build())

                .build();

        executeRequest(callback, request);

    }

    @Override

    public void dopostMutipart(String url,HashMap<String,String> params,INetCallback callback){

        MultipartBody.Builder multipartbuilder = new MultipartBody.Builder();

        multipartbuilder.setType(MultipartBody.FORM);

        if (params!=null){

            for (String param:params.keySet()){

                multipartbuilder.addFormDataPart(param,params.get(param));

            }

        }

        Request request = new Request.Builder()

                .url(url)

                .post(multipartbuilder.build())

                .build();

        executeRequest(callback,request);

    }

    @Override

    public void dopostjson(String url,String jsonstr,INetCallback callback){

        MediaType jsonmediaType = MediaType.get("application/json");

        RequestBody requestBody = RequestBody.create(jsonstr, jsonmediaType);

        Request request = new Request.Builder()

                .url(url)

                .post(requestBody)

                .build();

        executeRequest(callback,request);

    }

}

封装了Call对象及Call.equeue

private void executeRequest(INetCallback callback, Request request) {

        Call call = client.newCall(request);

        call.enqueue(new Callback() {

            @Override

            public void onFailure(@NotNull Call call, @NotNull IOException e) {

                handler.post(new Runnable() {

                    @Override

                    public void run() {

                        callback.onFailed(e);

                    }

                });

            }

            @Override

            public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {

                String respstr = null;

                try {

                    respstr = response.body().string();

                } catch (IOException e) {

                    handler.post(new Runnable() {

                        @Override

                        public void run() {

                            callback.onFailed(e);

                        }

                    });

                    return;

                }

                String finalRespstr = respstr;

                handler.post(new Runnable() {

                    @Override

                    public void run() {

                        callback.onSuccess(finalRespstr);

                    }

                });

            }

        });

    }

然后在事件处理中调用

OKHttpUtils.getInstance.(get/post/postMutipart/postjson)中的一种即可

另附okhttp github地址:https://github.com/square/okhttp

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

友情链接更多精彩内容