OKhttp简单封装


public class OkhttpUtils {
    private NetDataCallBack mNetDataCallBack;
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);

            switch (msg.what) {
                case 0:
                    //Object obj = msg.obj;
                    mNetDataCallBack.requestSuccess(msg.obj);//此时回调的数据已经在主线程了(get方式数据)
                    break;
                case 1:
                    mNetDataCallBack.requestSuccess(msg.obj);//此时回调的数据已经在主线程了(post方式数据)
                    Log.d("mNetDataCallBackmsg.obj", "handleMessage: "+msg.obj.toString());
            }
        }
    };

    //get请求方式
    public <T> void getDataGetFromServer(String url, final NetDataCallBack mNetDataCallBack, final Class<T> clazz) {
        //共用一个接口,给成员的接口引用赋值(详见handler里面)
        this.mNetDataCallBack = mNetDataCallBack;
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .connectTimeout(15, TimeUnit.SECONDS)
                .writeTimeout(20, TimeUnit.SECONDS)
                .readTimeout(20, TimeUnit.SECONDS)
                .build();
        Request request = new Request.Builder()
                .url(url)
                .build();
      Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                //mNetDataCallBack.requestFailure(500,e.getMessage());
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                //回调的数据在子线程,所以直接用handler进行处理,把数据放在主线程,然后在回调
                Message message = Message.obtain();
                message.what = 0;
                Gson gson = new Gson();
                T t = gson.fromJson(response.body().string(), clazz);
                message.obj = t;
                handler.sendMessage(message);
            }
        });
    }



    //post请求方式
    public <T> void getDataPostFromServer(String url, NetDataCallBack netDataCallBackIFace, Map<String, String> params, final Class<T> clazz) {
        this.mNetDataCallBack = netDataCallBackIFace;
        RequestBody requestBody = null;

        OkHttpClient client = new OkHttpClient();
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .connectTimeout(20, TimeUnit.SECONDS)
                .readTimeout(15, TimeUnit.SECONDS)
                .writeTimeout(15, TimeUnit.SECONDS)
                .build();

        if (params == null) {
            params = new HashMap<String, String>();
        }
        FormBody.Builder builder = new FormBody.Builder();
        for (Map.Entry<String, String> entry : params.entrySet()) {
            String key = entry.getKey().toString();
            String value = null;
            if (entry.getValue() == null) {
                value = "";
            } else {
                value = entry.getValue().toString();
            }
            Log.e("=====", "getDataPostFromServer: " + key + " ," + value);
            builder.add(key, value);
        }
        requestBody = builder.build();
        final Request request = new Request.Builder()
                .url(url)
                .post(requestBody)
                .build();

        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.e("=====", "onFailure: " + e.getMessage());
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {

                Log.e("=====", "onResponse: " + response.body().toString());

                Gson gson = new Gson();
                T t = gson.fromJson(response.body().string(), clazz);
                Message message = Message.obtain();
                message.what = 1;
                message.obj = t;
                handler.sendMessage(message);
            }
        });

    }

    //定义一个接口,用来回调数据
    public interface NetDataCallBack<T> {
        void requestSuccess(T t);

        void requestFailure(int errCode, String errMsg);
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值