Okhttp工具类封装

来源:互联网 发布:新百伦淘宝店 编辑:程序博客网 时间:2024/05/04 09:53
废话不多讲,直接上代码
package zhangxuelei1506d.utitls;import android.os.Handler;import org.json.JSONObject;import java.io.IOException;import java.util.Map;import okhttp3.Call;import okhttp3.Callback;import okhttp3.FormBody;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;/** * Created by Administrator on 2017/9/6. * 1、okhttp的中级封装   实现两个功能   从服务器下载数据  从客户端提交数据 * 封装优秀的okhttp:okhttputils,okgo(更深入的封装研究okgo) * 2、节约内存,使所有的网络请求都用一个okhttpclient和handler对象 * 3、解决okhttp网络请求成功代码在子线程中的问题,把请求成功后的逻辑代码放到主线程中执行 * 简化代码量, * 知识点:  1、单例模式()2、handler 3、接口 4、okhttp */public class OkHttpManager {    public OkHttpClient mClient;    //定义成员变量    public OkHttpClient okHttpClient;    public static Handler mhandler;    public volatile static OkHttpManager sManagerr;    //使用构造方法完成初始化     私有化操作    private OkHttpManager() {        mClient = new OkHttpClient();        mhandler = new Handler();    }    //使用单例模式通过获取的方式拿到对象    public static OkHttpManager getinstance() {        OkHttpManager instance = null;        if (sManagerr == null) {            synchronized (OkHttpManager.class) {                if (instance == null) {                    instance = new OkHttpManager();                    sManagerr = instance;                }            }        }        return sManagerr;    }    //定义接口    public interface Func1 {        void onRespense(String resule);    }    public interface Func2 {        void onResponse(byte[] result);    }    interface Func3 {        void onResponse(JSONObject jsonObject);    }    //使handler接口保证 处理数据的逻辑在主线程中    //处理请求网络成功的方法,返回的结果是json字符串    private static void onsuccessjsonStringMethod(final String jsonValue, final Func1 callBack) {        mhandler.post(new Runnable() {            @Override            public void run() {                if (callBack != null) {                    try {                        callBack.onRespense(jsonValue);                    } catch (Exception e) {                        e.printStackTrace();                    }                }            }        });    }    //处理请求网络成功的方法,返回的结果是字节    private static void onsuccessjsonStringMethod(final byte[] bytes, final Func2 callBack) {        mhandler.post(new Runnable() {            @Override            public void run() {                if (callBack != null) {                    try {                        callBack.onResponse(bytes);                    } catch (Exception e) {                        e.printStackTrace();                    }                }            }        });    }    //暴漏提供给外界调用的方法    /**     * 请求指定的url返回的结果是json字符串     */    public void asyncjsonstringByurl(String url, final Func1 callBack) {        Request request = new Request.Builder().url(url).build();            mClient.newCall(request).enqueue(new Callback() {                @Override                public void onFailure(Call call, IOException e) {                }                @Override                public void onResponse(Call call, Response response) throws IOException {                    //判断response是否有对象,成功                    if (response != null && response.isSuccessful()) {                        onsuccessjsonStringMethod(response.body().string(), callBack);                    }                }            });    }    //提交表单    public void sendComplexFrom(String url, Map<String,String> params, final Func1 callBack) {        FormBody.Builder form_builder = new FormBody.Builder();        //对键值进行非空判断        if (params != null && !params.isEmpty()) {            for (Map.Entry<String, String> entry : params.entrySet()) {                form_builder.add(entry.getKey(),entry.getValue());            }        }        FormBody formBody = form_builder.build();        Request request = new Request.Builder().url(url).post(formBody).build();        mClient.newCall(request).enqueue(new Callback() {            @Override            public void onFailure(Call call, IOException e) {            }            @Override            public void onResponse(Call call, Response response) throws IOException {                if (response != null && response.isSuccessful()) {                    onsuccessjsonStringMethod(response.body().string(), callBack);                }            }        });    }    //下载图片    public void LoadImage(String url, final Func2 callBack){        Request request = new Request.Builder().url(url).build();        mClient.newCall(request).enqueue(new Callback() {            @Override            public void onFailure(Call call, IOException e) {            }            @Override            public void onResponse(Call call, Response response) throws IOException {                if (response != null && response.isSuccessful()) {                    onsuccessjsonStringMethod(response.body().bytes(),callBack);                }            }        });    }}