【OkHttp】封装帮助类

来源:互联网 发布:淘宝旅行机票网 编辑:程序博客网 时间:2024/05/22 12:27

分享一个okhttp请求帮助类

package com.xxx.net;import android.os.AsyncTask;import android.util.Log;import com.xxx.util.LogcatHelper;import java.io.IOException;import java.util.Map;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import okhttp3.MediaType;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.RequestBody;import okhttp3.Response;/** * Created by Administrator on 2016/9/22 0022. */public class HttpHelp {    public static final MediaType FORM_CONTENT_TYPE            = MediaType.parse("application/x-www-form-urlencoded; charset=utf-8");    public static final MediaType FORM_CONTENT_TYPE_XML            = MediaType.parse("text/xml; charset=utf-8");    private static HttpHelp instance;    private static OkHttpClient client;    private ExecutorService executor;    public  enum Type{        GET,POST    }    public interface CallBack{        void result(String result, boolean isSuccess);    }    public HttpHelp() {        client = new OkHttpClient();        executor = Executors.newCachedThreadPool();    }    public static HttpHelp getInstance() {        if (instance ==null){            instance = new HttpHelp();        }        return instance;    }    public   void requestGet(final String url, final CallBack callBack){        new MyAsyncTask(url,callBack).executeOnExecutor(executor);    }    public   void requestPost(final String url, Map<String,String> formParams,final CallBack callBack){        new MyAsyncTask(url,formParams,callBack).executeOnExecutor(executor);    }    public   void requestPost(final String url, Map<String,String> params,boolean isParamXml,final CallBack callBack){        new MyAsyncTask(url,params,callBack,isParamXml).executeOnExecutor(executor);    }    public  class MyAsyncTask extends AsyncTask<Void,Void,String>{        private String url;        private Map<String,String> formParams;        private Type type = Type.GET;        private CallBack mCallBack;        private boolean isParamXml;//传入参数是否是xml标签格式        /**         * get请求         * @param url  请求地址         * @param callBack 结果回调         */        public MyAsyncTask( String url,CallBack callBack) {            this.url = url;            this.type = Type.GET;            this.mCallBack = callBack;        }        /**         * post请求         * @param url  请求地址         * @param formParams 表单参数         * @param callBack  结果回调         */        public MyAsyncTask( String url, Map<String,String> formParams,CallBack callBack) {            this.url = url;            this.formParams = formParams;            this.type = Type.POST;            this.mCallBack = callBack;        }        /**         * post请求(isParamXml传true,用于xml格式)         * @param url  请求地址         * @param formParams 表单参数         * @param callBack  结果回调         */        public MyAsyncTask( String url, Map<String,String> formParams,CallBack callBack,boolean isParamXml) {            this.url = url;            this.formParams = formParams;            this.type = Type.POST;            this.mCallBack = callBack;            this.isParamXml = isParamXml;        }        @Override        protected String doInBackground(Void... params) {            String result = null;            Request request = null;            try {                if(type ==Type.GET){                    request = new Request.Builder()                            .url(url)                            .build();                }else if(type ==Type.POST){                    StringBuffer sb = new StringBuffer();                    RequestBody body;                    if(isParamXml){                        //设置xml格式参数                        sb.append("<xml>");                        for (String key: formParams.keySet()) {                            sb.append("<"+key+">"+formParams.get(key)+"</"+key+">");                        }                        sb.append("</xml>");                        Log.i("TAG", ""+sb.toString());                        body = RequestBody.create(FORM_CONTENT_TYPE_XML, sb.toString());                    }else{                        //设置表单参数//                    FormBody.Builder builder = new  FormBody.Builder();                        for (String key: formParams.keySet()) {//                        builder.add(key,formParams.get(key));                            sb.append(key+"="+formParams.get(key)+"&");                        }                        Log.i("TAG", ""+sb.toString());                        body = RequestBody.create(FORM_CONTENT_TYPE, sb.toString());                    }                    //创建请求                    request = new Request.Builder()                            .url(url)//                            .post(builder.build())                            .post(body)                            .build();                }                //发送请求                Response response = client.newCall(request).execute();                result = response.body().string().toString();                LogcatHelper.showLogCompletion("result: "+result,500);            } catch (IOException e) {                e.printStackTrace();            }catch (NullPointerException e) {                e.printStackTrace();            }            return result;        }        @Override        protected void onPostExecute(String result) {            super.onPostExecute(result);            if(result ==null){                mCallBack.result(null,false);            }else{                mCallBack.result(result,true);            }        }    }}



0 0
原创粉丝点击