封装Okhttp(Gson一起封装在里面减少了解析的操作)

public class OkSingle {
    protected static Context context;
    private static OkSingle okSingle;
    private static OkHttpClient mOkHttpClient;
    private static Gson gson;

    private static final int SUCCESS = 1;
    private static final int FAILED = 0;

    public OkSingle(OkHttpClient okHttpClient) {
        if (okHttpClient == null) {
            mOkHttpClient = new OkHttpClient();
        } else {
            mOkHttpClient = okHttpClient;
        }
        //获取MyApplication的context
        context = MyApplication.context;
        gson = new Gson();

    }

    public static OkSingle initClient(OkHttpClient okHttpClient) {
        if (okSingle == null) {
            synchronized (OkSingle.class) {
                if (okSingle == null) {
                    okSingle = new OkSingle(okHttpClient);
                }
            }
        }
        return okSingle;

    }

    //获得单例的对象
    public static OkSingle getInstance() {
        return initClient(null);

    }

    public <T> void getRequestAsync(String url,
                                    final GetResponse.ErrorListener errorListener,
                                    final GetResponse.Listener<T> listener,
                                    final Class<T> tClass) {
        Request request = new Request.Builder().url(url).build();
        //这种写法,可以让Handler指定属于主线程

        final Handler handler = new Handler(Looper.getMainLooper()) {

            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                switch (msg.what) {
                    case SUCCESS:
                        //成功时候的回调
                        listener.onResponse((T) msg.obj);
                        break;
                    case FAILED:
                        errorListener.onErrorResponse();
                        break;
                }

            }
        };

        mOkHttpClient.newCall(request).enqueue(new Callback() {

            @Override
            public void onFailure(Call call, IOException e) {
                errorListener.onErrorResponse();
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                try {
                    String result = response.body().string();
                    T t = gson.fromJson(result, tClass);
                    Message message = handler.obtainMessage();//这种写法比较省内存
                    message.what = SUCCESS;
                    message.obj = t;
                    handler.sendMessage(message);
                } catch (IOException e) {
                    e.printStackTrace();
                    //因为是失败,所以返回失败,在主线程中判断
                    handler.sendEmptyMessage(FAILED);
                }
            }


        });


    }

    
    
    //自定义接口
    public interface GetResponse {
        
        //成功的接口
        interface Listener<T> {
            void onResponse(T response);
        }
        //失败的接口
        interface ErrorListener {
            void onErrorResponse();
        }
    }

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值