需求、完成接口回调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);
}