OkHttp解析

package com.andy.okhttpdemo;

import android.os.Handler;
import android.os.Looper;
import android.os.Message;

import com.google.gson.Gson;

import java.io.IOException;
import java.util.concurrent.TimeUnit;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class OkHttpUtils {
   //单例模式
       private static OkHttpUtils instance;
       private OkHttpClient client;
       private Gson gson;
       private Handler handler;
       private OkHttpUtils(){
           client=new OkHttpClient.Builder()
                   .readTimeout(3000, TimeUnit.MILLISECONDS)
                   .writeTimeout(3000, TimeUnit.MILLISECONDS)
                   .connectTimeout(3000, TimeUnit.MILLISECONDS)
                   .build();
           gson=new Gson();
           handler=new Handler(Looper.getMainLooper()){
               @Override
               public void handleMessage(Message msg) {
                   DataMsg data=(DataMsg)msg.obj;
                   switch (msg.what){
                       case 0:
                           if(data.callBack!=null)
                               data.callBack.success(data.obj);
                           break;
                       case 1:
                           if(data.callBack!=null)
                               data.callBack.error(data.e);
                           break;
                   }
               }
           };
       }
       public static OkHttpUtils getInstance(){
           if(instance==null){
               synchronized (OkHttpUtils.class){
                   if(instance==null){
                       instance=new OkHttpUtils();
                   }
               }
           }
           return instance;
       }

       public void get(String getUrl,Class<?> cls,MyCallBack callBack){
           Request request = getRequest(getUrl);
           call(request,cls,callBack);
       }

       private void call(Request request, final Class<?> cls, final MyCallBack callBack) {
           Call call=client.newCall(request);
           call.enqueue(new Callback() {
               @Override
               public void onFailure(Call call, IOException e) {
                   DataMsg data=new DataMsg();
                   data.e=e;
                   data.callBack=callBack;

                   Message msg=Message.obtain();
                   msg.what=1;
                   msg.obj=data;
                   handler.sendMessage(msg);
               }

               @Override
               public void onResponse(Call call, Response response) throws IOException {
                   String result = response.body().string();
                   DataMsg data=new DataMsg();
                   data.obj=gson.fromJson(result,cls);
                   data.callBack=callBack;

                   Message msg=Message.obtain();
                   msg.what=0;
                   msg.obj=data;
                   handler.sendMessage(msg);
               }
           });
       }

       public Request getRequest(String url){
           Request request=new Request.Builder()
                   .url(url)
                   .build();
           return request;
       }

       interface MyCallBack<T>{
           void success(T t);
           void error(Exception e);
       }

       static class DataMsg{
           Exception e;
           Object obj;
           MyCallBack callBack;
       }
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值