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); } }
OKhttp简单封装
最新推荐文章于 2021-05-31 17:35:25 发布