【OkHttp】封裝幫助類

分享一個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);
            }
        }
    }




}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章