版权声明:本文为博主原创文章,未经博主允许不得转载。 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);
}