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(); } } }
封装Okhttp(Gson一起封装在里面减少了解析的操作)
最新推荐文章于 2023-04-23 15:07:34 发布