android okHttp框架封装

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jian11058/article/details/89208325

需求、完成接口回调jeson数据;这个的好处有:1、自动保存cookie;2、返回jeson数据,主要是处理惯了json数据;3、调用的时候,没有那么代码;4、传参数和接收数据不需要创建那么多的requestbean、responsebean对象,非常轻盈好用;

以前面试的时候,面试的问我,你知道单例吗?你知道gradle吗,我说我不知道,然后他就说我们都很忙,就不要浪费彼此的时间了,你可以走了。这个面试的人非常不礼貌,问我几个问题,就叫我走了,呵呵。然后我没走,我说我请假大老远来面试,你问我几个问题,然后就要我走了,我感觉我被有些人看扁了,不管你怎么说,我还是想要展现一下自己的能力,不管你怎么看。我把我做的几个app给他看了,讲了里面的一些当下热门的功能,和一些有难度的问题。然后就走了。后来我看那家公司一直在招人,招了好几个月。但是这次的面试也让我恶心了几个月,我每次都会想这件事情,都很难受。
我怎么说这些,好了不扯了。

1、依赖:

implementation 'com.squareup.okhttp3:okhttp:3.9.1'
implementation 'com.squareup.okhttp3:logging-interceptor:3.9.1'
implementation 'com.tsy:myokhttp:1.1.3'

2、okhttp的单例工具


public class MyOkHttpUtil {
    private final static int Second=5000;//响应超时时间
    private OnSuccessListener onSuccessListener;
    private static MyOkHttpUtil instance;
    public static MyOkHttp myOkhttp;
    private static Context context;
    public static MyOkHttpUtil getInstance(Context contexto){
        context=contexto;
        if (instance==null){
            synchronized (MyOkHttpUtil.class){
                if (instance==null){
                    instance=new MyOkHttpUtil();
                }
            }
        }
        return instance;
    }
    private MyOkHttpUtil(){
        //持久化存储cookie
        ClearableCookieJar cookieJar =
                new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(context));

        //log拦截器
        HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
        logging.setLevel(HttpLoggingInterceptor.Level.BODY);

        //自定义OkHttp
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .connectTimeout(Second, TimeUnit.MILLISECONDS)
                .readTimeout(Second, TimeUnit.MILLISECONDS)//10000L;
                .cookieJar(cookieJar)       //设置开启cookie
                .addInterceptor(logging)            //设置开启log
                .build();
        myOkhttp = new MyOkHttp(okHttpClient);
    }

    public static void doPost(String url,Map map,Context context1) {
        myOkhttp.post()
                .url(url)
                .params(map)
                .tag(context1)
                .enqueue(new JsonResponseHandler() {
                    @Override
                    public void onSuccess(int statusCode, JSONObject response) {
                        Log.d("TAG", "doPost onSuccess JSONObject:" + response);
                    }

                    @Override
                    public void onSuccess(int statusCode, JSONArray response) {
                        Log.d("TAG", "doPost onSuccess JSONArray:" + response);
                    }

                    @Override
                    public void onFailure(int statusCode, String error_msg) {
                        Log.d("TAG", "doPost onFailure:" + error_msg);
                    }
                });
    }

    public void doPostJSON(String url, JSONObject jsonObject,Context context1) {

        myOkhttp.post()
                .url(url)
                .jsonParams(jsonObject.toString())          //与params不共存 以jsonParams优先
                .tag(context1)
                .enqueue(new JsonResponseHandler() {
                    @Override
                    public void onSuccess(int statusCode, JSONObject response) {
//                        Log.d("TAG", "doPostJSON onSuccess JSONObject:" + response);

                        onSuccessListener.onSuccessObject(statusCode,response);
                    }

                    @Override
                    public void onSuccess(int statusCode, JSONArray response) {
//                        Log.d("TAG", "doPostJSON onSuccess JSONArray:" + response);
                        onSuccessListener.onSuccessArray(statusCode,response);
                    }

                    @Override
                    public void onFailure(int statusCode, String error_msg) {
//                        Log.d("TAG", "doPostJSON onFailure:" + error_msg);
                        onSuccessListener.onFailure(statusCode,error_msg);
                    }
                });
    }

    public void setonSuccessObjectListener(OnSuccessListener listener){
        onSuccessListener=listener;
    }
}


3、请求成功时回调接口OnSuccessListener:

public interface OnSuccessListener {
    void onSuccessObject(int statusCode, JSONObject response);
    void onSuccessArray(int statusCode, JSONArray response);
    void onFailure(int statusCode, String error_msg);
}

4、参数:url、jeson参数的请求

public class HttpUrl {
    private static final String HOST="http://monitor.zerogame.cn";

//    登录
    public static String getLoginUrl(){
        return HOST+"/userapi/app_services/userlogin";
    }
    public static JSONObject getLoginJson(String name,String password){
        JSONObject jsonObject=new JSONObject();
        try {
            jsonObject.put("username", "15056463537");
            jsonObject.put("password", "123");
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return jsonObject;
    }
    //    获得订单列表 /cy_emp/order/user/type/app
    public static String getOrderListUrl(){
        return HOST+"/cy_emp/order/user/type/app";
    }
    public static JSONObject getOrderListUrlData(String status,String current_page){
        JSONObject jsonObject=new JSONObject();
        try {
            jsonObject.put("status", status);
            jsonObject.put("current_page", current_page);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return jsonObject;
    }
}

5、在调用的时候,


 private void doLoginJeson(){
 		//参数处理
        String url=HttpUrl.getLoginUrl();
        JSONObject jsonObject=HttpUrl.getLoginJson("15056463537","123");

		//创建onhttp的监听
        MyOkHttpUtil.getInstance(this).setonSuccessObjectListener(new OnSuccessListener() {
            @Override
            public void onSuccessObject(int statusCode, JSONObject response) {
                Log.e(TAG, "onSuccessObject: "+response );
            }

            @Override
            public void onSuccessArray(int statusCode, JSONArray response) {
                Log.e(TAG, "onSuccessArray: "+response );
            }

            @Override
            public void onFailure(int statusCode, String error_msg) {
                Log.e(TAG, "onFailure: "+error_msg );
            }
        });
	
		//创建onhttp请求
        MyOkHttpUtil.getInstance(this).doPostJSON(url,jsonObject,this);
    }

猜你喜欢

转载自blog.csdn.net/jian11058/article/details/89208325