OKhttp的异步get和post烦人封装

来源:互联网 发布:js 设置按钮失效 编辑:程序博客网 时间:2024/05/16 09:50


public class OkHttpUtils {    private static OkHttpUtils okHttpUtils;    private static Handler handler = new Handler();    //私有化构造方法    private OkHttpUtils(){    }    /**     * 获取OkhttpCLient的实例方法     * @return     */    /*public static OkHttpClient getInstance(){//懒汉式        if(null == okHttpClient){            synchronized (OkHttpUtils.class){                if(null == okHttpClient)                    okHttpClient = new OkHttpClient();            }        }        return okHttpClient;    }*/    /**     * 得到这个OKHttpUtils实例     * @return     */    public static OkHttpUtils getInstance(){        if(null == okHttpUtils){            synchronized (OkHttpUtils.class){                if(null == okHttpUtils)                    okHttpUtils = new OkHttpUtils();            }        }        return okHttpUtils;    }    /**     * 封装的异步Get请求     * @param path     * @param     */    public void doGet(String path,Map<String,String> map,final LoginCallBack loginCallBack){        //创建一个字符串容器        StringBuilder sb = null;//new StringBuilder();//线程非安全        for (String key : map.keySet()) {            //"mobile="+value+"&paword="+value  http://www.baidu.com?"mobile="+value+"&paword="+value            //sb.append(key).append("=").append(map.get(key)).append("&");//moble=value&            if(null == sb){                sb = new StringBuilder();                sb.append("?");            }else{                sb.append("&");            }            sb.append(key).append("=").append(map.get(key));        }        Request request= new Request.Builder()                .url(path+sb.toString())//http://www.baidu.com?"mobile="+value+"&paword="+value                .get()                .build();        //OkHttp 网络        OkHttpClient okHttpClient = new OkHttpClient();        Call call = okHttpClient.newCall(request);        //异步请求        call.enqueue(new Callback() {            @Override            public void onFailure(Call call, final IOException e) {                //子线程的                handler.post(new Runnable() {                    @Override                    public void run() {                        //失败                        loginCallBack.onFailed(e.getMessage());                    }                });            }            @Override            public void onResponse(Call call, final Response response) throws IOException {                handler.post(new Runnable() {                    @Override                    public void run() {                        try {                            loginCallBack.onSuccess(response.body().string());                        } catch (IOException e) {                            e.printStackTrace();                        }                    }                });            }        });    }    /**     * 异步post请求封装     * @param path     * @param map     * @param loginCallBack     */    public static void doPost(String path, Map<String,String> map, final LoginCallBack loginCallBack){        //构建请求参数        FormBody.Builder bodyBuilder = new FormBody.Builder();        for (String key : map.keySet()) {            bodyBuilder.add(key,map.get(key));        }        Request request = new Request.Builder()                .post(bodyBuilder.build())                .url(path)                .build();        OkHttpClient okHttpClient = new OkHttpClient();        okHttpClient.newCall(request).enqueue(new Callback() {            @Override            public void onFailure(Call call, final IOException e) {                //失败                //子线程的                handler.post(new Runnable() {                    @Override                    public void run() {                        //失败                        loginCallBack.onFailed(e.getMessage());                    }                });            }            @Override            public void onResponse(Call call, final Response response) throws IOException {                handler.post(new Runnable() {                    @Override                    public void run() {                        try {                            loginCallBack.onSuccess(response.body().string());                        } catch (IOException e) {                            e.printStackTrace();                        }                    }                });            }        });    }}