day 20

HttpUtil工具的学习和练习

简单的okhttp使用

private  void requestImages(){

        String url ="http://112.124.22.238:8081/course_api/banner/query?type=1";


      OkHttpClient client = new OkHttpClient();

        RequestBody body = new FormEncodingBuilder()
                .add("type","1")
     .build();


        Request request = new Request.Builder()
               .url(url)
                .post(body)
                .build();



           client.newCall(request).enqueue(new Callback() {
                @Override
                public void onFailure(Request request, IOException e) {


                }

               @Override
                public void onResponse(Response response) throws IOException {

                   if(response.isSuccessful()){

                       String json =  response.body().string();

                        Type type = new TypeToken<List<Banner>>(){}.getType();
                       mBanner = mGson.fromJson(json,type);

                        initSlider();


                    }
                }
            });


        httpHelper.get(url, new SpotsCallBack<List<Banner>>(getContext()){


            @Override
            public void onSuccess(Response response, List<Banner> banners) {

                mBanner = banners;
                initSlider();
            }

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

            }
        });



    }

简单封装okhttp

public class OkHttpHelper {






        public static final String TAG="OkHttpHelper";

        private  static  OkHttpHelper mInstance;
        private OkHttpClient mHttpClient;
        private Gson mGson;

        private Handler mHandler;



        static {
            mInstance = new OkHttpHelper();
        }

        private OkHttpHelper(){

            mHttpClient = new OkHttpClient();
            mHttpClient.setConnectTimeout(10, TimeUnit.SECONDS);
            mHttpClient.setReadTimeout(10,TimeUnit.SECONDS);
            mHttpClient.setWriteTimeout(30,TimeUnit.SECONDS);

            mGson = new Gson();

            mHandler = new Handler(Looper.getMainLooper());

        };

        public static  OkHttpHelper getInstance(){
            return  mInstance;
        }




        public void get(String url,BaseCallback callback){


            Request request = buildGetRequest(url);

            request(request,callback);

        }


        public void post(String url,Map<String,String> param, BaseCallback callback){

            Request request = buildPostRequest(url,param);
            request(request,callback);
        }





        public  void request(final Request request,final  BaseCallback callback){

            callback.onBeforeRequest(request);

            mHttpClient.newCall(request).enqueue(new Callback() {

                @Override
                public void onFailure(Request request, IOException e) {
                    callback.onFailure(request,e);

                }

                @Override
                public void onResponse(Response response) throws IOException {

                    callback.onResponse(response);

                    if(response.isSuccessful()) {

                        String resultStr = response.body().string();

                        Log.d(TAG, "result=" + resultStr);

                        if (callback.mType == String.class){
                            callbackSuccess(callback,response,resultStr);
                        }
                        else {
                            try {

                                Object obj = mGson.fromJson(resultStr, callback.mType);
                                callbackSuccess(callback,response,obj);
                            }
                            catch (com.google.gson.JsonParseException e){ // Json解析的错误
                                callback.onError(response,response.code(),e);
                            }
                        }
                    }
                    else {
                        callbackError(callback,response,null);
                    }

                }
            });


        }


        private void callbackSuccess(final  BaseCallback callback , final Response response, final Object obj ){

            mHandler.post(new Runnable() {
                @Override
                public void run() {
                    callback.onSuccess(response, obj);
                }
            });
        }


        private void callbackError(final  BaseCallback callback , final Response response, final Exception e ){

            mHandler.post(new Runnable() {
                @Override
                public void run() {
                    callback.onError(response,response.code(),e);
                }
            });
        }



        private  Request buildPostRequest(String url,Map<String,String> params){

            return  buildRequest(url,HttpMethodType.POST,params);
        }

        private  Request buildGetRequest(String url){

            return  buildRequest(url,HttpMethodType.GET,null);
        }

        private  Request buildRequest(String url,HttpMethodType methodType,Map<String,String> params){


            Request.Builder builder = new Request.Builder()
                    .url(url);

            if (methodType == HttpMethodType.POST){
                RequestBody body = builderFormData(params);
                builder.post(body);
            }
            else if(methodType == HttpMethodType.GET){
                builder.get();
            }


            return builder.build();
        }



        private RequestBody builderFormData(Map<String,String> params){


            FormEncodingBuilder builder = new FormEncodingBuilder();

            if(params !=null){

                for (Map.Entry<String,String> entry :params.entrySet() ){

                    builder.add(entry.getKey(),entry.getValue());
                }
            }

            return  builder.build();

        }



        enum  HttpMethodType{

            GET,
            POST,

        }



}
原文地址:https://www.cnblogs.com/chenaiiu/p/13551307.html