• 封装安卓的okhttp


    1.封装了get方法,handler更新主线程,回调的onsuccess,onfailure,onerror等方法

    2.配置文件

    api 'com.android.support:recyclerview-v7:26.1.0'
    api 'com.squareup.okhttp3:okhttp:3.9.1'
    //fastjson
    api 'com.alibaba:fastjson:1.2.44'

    3.先建立一个http包,建BaseHttpCallback和OkHttpHelper这2个类,以后会加loading...这个东西

    public class OkHttpHelper {
    
        private static OkHttpClient okHttpClient;
        private android.os.Handler handler;
    
        private OkHttpHelper(){
            okHttpClient =new OkHttpClient();
            handler =new android.os.Handler(Looper.getMainLooper());
    
        };
    
        public static OkHttpHelper getInstance(){
            return new OkHttpHelper();
        }
        public void get(String url,BaseHttpCallback baseHttpCallback){
            Request request = buildRequest(url,null,HttpMethodType.GET);
            doRequest(request, baseHttpCallback);
        }
    
        public void post(String url, Map<String,String>params,BaseHttpCallback baseHttpCallback){
            Request request = buildRequest(url,null,HttpMethodType.POST);
            doRequest(request, baseHttpCallback);
        }
    
        public void doRequest(final Request request, final BaseHttpCallback baseHttpCallback){
    
            baseHttpCallback.onRequestBefore(request);
            okHttpClient.newCall(request).enqueue(new Callback() {
                @Override
                public void onFailure(Call call, IOException e) {
                    callbackFailure(baseHttpCallback,e);
                }
                @Override
                public void onResponse(Call call, Response response) throws IOException {
                    if(response.isSuccessful()){
                        String s= response.body().string();
                        callbackSuccess(baseHttpCallback,response,s);
                    }else{
                        callbackError(baseHttpCallback,response,response.code());
                    }
                }
            });
        }
    
        private Request buildRequest(String url,Map<String,String> params,HttpMethodType methodType){
            Request.Builder builder = new Request.Builder();
            builder.url(url);
            if(methodType==HttpMethodType.GET){
                builder.get();
            }else if(methodType==HttpMethodType.POST){
    
            }
            return builder.build();
        }
    
        enum HttpMethodType{
            GET,
            POST
        }
    
    
        private void callbackSuccess(final BaseHttpCallback callback, final Response response, final String s){
            handler.post(new Runnable() {
                @Override
                public void run() {
                    callback.onSuccess(response,s);
                }
            });
        }
    
    
        private void callbackError(final BaseHttpCallback callback, final Response response, final int code){
            handler.post(new Runnable() {
                @Override
                public void run() {
                    callback.onError(response,code,null);
                }
            });
        }
    
        private void callbackFailure(final BaseHttpCallback callback, final Exception e){
            handler.post(new Runnable() {
                @Override
                public void run() {
                    callback.onFailure(e);
                }
            });
        }
    
    }
    public abstract class BaseHttpCallback {
    
        public abstract void onRequestBefore(Request request);
    
        public abstract void onSuccess(Response response,String string);
        public abstract void onError(Response response,int code,Exception e);
    
        public abstract void onFailure(Exception e);
    }

    4. 还另外封装了个User类

    public class User {
        public String result;
        public List<Data> data;
        public class Data{
            public String name;
            public String age;
    
            public String getName() {
                return name;
            }
    
            public String  getAge() {
                return age;
            }
        }
        public String getResult() {
            return result;
        }
        public List<Data> getDatas() {
            return data;
        }
    }

    5.activity中调用例子

    OkHttpHelper httpHelper  =OkHttpHelper.getInstance();
     String url = "http://www.baidu.com";
            httpHelper.get(url,new BaseHttpCallback(){
    
                @Override
                public void onRequestBefore(Request request) {
    
                }
    
                @Override
                public void onSuccess(Response response, String string) {
    
                }
    
                @Override
                public void onError(Response response, int code, Exception e) {
    
                }
    
                @Override
                public void onFailure(Exception e) {
                    Toast.makeText(MainActivity.this,"当前网络不可用,请检查网络",Toast.LENGTH_LONG).show();
                }
            });

    6.未完善的,没有post,没有loading效果,

  • 相关阅读:
    面向对象
    PIL库学习及运用
    Jieba库使用和好玩的词云
    Python汉诺塔问题
    用python计算圆周率PI
    使用python画一只佩奇
    面向对象与正则表达式的学习
    美白,磨皮,搞笑图片处理
    tuetle制作汉诺塔
    python圆周率的计算及进度条提示
  • 原文地址:https://www.cnblogs.com/norm/p/8270816.html
Copyright © 2020-2023  润新知