封装安卓的okhttp

Posted layfork

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了封装安卓的okhttp相关的知识,希望对你有一定的参考价值。

1.封装了get方法,handler更新主线程,回调的onsuccess,onfailure,onerror等方法

2.配置文件

api com.android.support:recyclerview-v7:26.1.0
api com.squareup.okhttp3:okhttp:3.9.1
//fastjson
api com.alibaba:fastjson:1.2.44

 

3.先建立一个http包,建BaseHttpCallback和OkHttpHelper这2个类,以后会加loading...这个东西

 

 

public class OkHttpHelper {

    private static OkHttpClient okHttpClient;
    private android.os.Handler handler;

    private OkHttpHelper(){
        okHttpClient =new OkHttpClient();
        handler =new android.os.Handler(Looper.getMainLooper());

    };

    public static OkHttpHelper getInstance(){
        return new OkHttpHelper();
    }
    public void get(String url,BaseHttpCallback baseHttpCallback){
        Request request = buildRequest(url,null,HttpMethodType.GET);
        doRequest(request, baseHttpCallback);
    }

    public void post(String url, Map<String,String>params,BaseHttpCallback baseHttpCallback){
        Request request = buildRequest(url,null,HttpMethodType.POST);
        doRequest(request, baseHttpCallback);
    }

    public void doRequest(final Request request, final BaseHttpCallback baseHttpCallback){

        baseHttpCallback.onRequestBefore(request);
        okHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                callbackFailure(baseHttpCallback,e);
            }
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if(response.isSuccessful()){
                    String s= response.body().string();
                    callbackSuccess(baseHttpCallback,response,s);
                }else{
                    callbackError(baseHttpCallback,response,response.code());
                }
            }
        });
    }

    private Request buildRequest(String url,Map<String,String> params,HttpMethodType methodType){
        Request.Builder builder = new Request.Builder();
        builder.url(url);
        if(methodType==HttpMethodType.GET){
            builder.get();
        }else if(methodType==HttpMethodType.POST){

        }
        return builder.build();
    }

    enum HttpMethodType{
        GET,
        POST
    }


    private void callbackSuccess(final BaseHttpCallback callback, final Response response, final String s){
        handler.post(new Runnable() {
            @Override
            public void run() {
                callback.onSuccess(response,s);
            }
        });
    }


    private void callbackError(final BaseHttpCallback callback, final Response response, final int code){
        handler.post(new Runnable() {
            @Override
            public void run() {
                callback.onError(response,code,null);
            }
        });
    }

    private void callbackFailure(final BaseHttpCallback callback, final Exception e){
        handler.post(new Runnable() {
            @Override
            public void run() {
                callback.onFailure(e);
            }
        });
    }

}
public abstract class BaseHttpCallback {

    public abstract void onRequestBefore(Request request);

    public abstract void onSuccess(Response response,String string);
    public abstract void onError(Response response,int code,Exception e);

    public abstract void onFailure(Exception e);
}

4. 还另外封装了个User类

public class User {
    public String result;
    public List<Data> data;
    public class Data{
        public String name;
        public String age;

        public String getName() {
            return name;
        }

        public String  getAge() {
            return age;
        }
    }
    public String getResult() {
        return result;
    }
    public List<Data> getDatas() {
        return data;
    }
}

 

5.activity中调用例子

OkHttpHelper httpHelper  =OkHttpHelper.getInstance();
 String url = "http://www.baidu.com";
        httpHelper.get(url,new BaseHttpCallback(){

            @Override
            public void onRequestBefore(Request request) {

            }

            @Override
            public void onSuccess(Response response, String string) {

            }

            @Override
            public void onError(Response response, int code, Exception e) {

            }

            @Override
            public void onFailure(Exception e) {
                Toast.makeText(MainActivity.this,"当前网络不可用,请检查网络",Toast.LENGTH_LONG).show();
            }
        });

 

6.未完善的,没有post,没有loading效果,

以上是关于封装安卓的okhttp的主要内容,如果未能解决你的问题,请参考以下文章

安卓网络请求之——OkHttp学习

Android:安卓学习笔记之OkHttp原理的简单理解和使用

Android:安卓学习笔记之OkHttp原理的简单理解和使用

Android:安卓学习笔记之OkHttp原理的简单理解和使用

安卓 okhttp小结

okhttp的简介之简单封装