android okHttp框架封装获取string类型数据

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

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'
 	implementation 'com.github.franmontiel:PersistentCookieJar:v1.0.1'//持续化cookie

并且在gradle--allproject中加入maven,如下:
allprojects {
    repositories {
        google()
        jcenter()
        maven { url "https://jitpack.io" }//ClearableCookieJar 包
    }
}

2、okhttp的单例工具


package com.haier.myokhttpdemo;

import android.content.Context;
import android.util.Log;

import com.tsy.sdk.myokhttp.MyOkHttp;
import com.tsy.sdk.myokhttp.response.JsonResponseHandler;
import com.tsy.sdk.myokhttp.response.RawResponseHandler;

import org.json.JSONArray;
import org.json.JSONObject;

import java.util.Map;
import java.util.concurrent.TimeUnit;

import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;

/**
 * created by EDZ
 * on 2020/1/19
 */
public class MyOkHttpUtil {
    private final static int Second=5000;//响应超时时间
    private OkUtilOnlistener onlistener;
    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 void doPost(final int type, String url, Map map) {
        myOkhttp.post()
                .url(url)
                .params(map)
                .tag(context)
                .enqueue(new JsonResponseHandler() {
                    @Override
                    public void onSuccess(int statusCode, JSONObject response) {
                        Log.d("TAG", "doPost onSuccess JSONObject:" + response);

                        if (onlistener!=null){
                            onlistener.success(type,statusCode,response.toString());
                        }

                    }

                    @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);
                        if (onlistener!=null){
                            onlistener.failure(type,statusCode,error_msg);
                        }
                    }
                });
    }

    public void setOnListener(OkUtilOnlistener listener){
        this.onlistener=listener;
    }

    public void doPostJSON(final int type, String url, JSONObject jsonObject) {

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

                        onlistener.success(type,statusCode,response.toString());
                    }

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

                    }

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

                    }
                });
    }
    public void doGet(final int type, String url) {
        myOkhttp.get()
                .url(url)
                .tag(context)
                .enqueue(new RawResponseHandler() {
                    @Override
                    public void onSuccess(int statusCode, String response) {
                        if (onlistener!=null){
                            onlistener.success(type,statusCode,response);
                        }
                    }

                    @Override
                    public void onFailure(int statusCode, String error_msg) {
//                        Log.d("TAG", "doPostJSON onFailure:" + error_msg);
                        if (onlistener!=null){
                            onlistener.failure(type,statusCode,error_msg);
                        }
                    }
                });
    }

}

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

public interface OkUtilOnlistener {
    void success(int type,int statusCode, String response);
    void failure(int type,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、在调用的时候,

先初始化监听,再进行请求;
 MyOkHttpUtil.getInstance(this).setOnListener(new OkUtilOnlistener() {
            @Override
            public void success(int type, int statusCode, String response) {
                switch (type){
                    case getUserInfoType:
                        Log.e(TAG, "success getUserInfoType: "+response );
                        break;
                }
            }

            @Override
            public void failure(int type, int statusCode, String error_msg) {

            }
        });


	    private void getUserInfo(){
        String url="https://www.zhongshop.cn/api.html";
        Map param=new HashMap();
        param.put("method","user.info");
        param.put("token","b02249ecf8b6fabac057f569583ab774");
        MyOkHttpUtil.getInstance(this).doPost(getUserInfoType,url,param);
    }

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jian11058

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值