二话不说直接上代码:
public class NetworkUtil { private static NetworkUtil networkUtil; private OkHttpClient okHttpClient; private Handler handler; private NetworkUtil() { okHttpClient = new OkHttpClient(); handler = new Handler(Looper.getMainLooper()); } /** * synchronized 关键字,代表这个方法加锁, * 相当于不管哪一个线程(例如线程A),运行到这个方法时, * 都要检查有没有其它线程B(或者C、 D等)正在用这个方法(或者该类的其他同步方法), * 有的话要等正在使用synchronized方法的线程B(或者C 、D)运行完这个方法后再运行此线程A, * 没有的话,锁定调用者,然后直接运行。它包括两种用法:synchronized 方法和 synchronized 块。 * 此处修饰的是代码块。 * */ public static NetworkUtil getInstance() { if (networkUtil == null) { synchronized (NetworkUtil.class) { if (networkUtil == null) { networkUtil = new NetworkUtil(); } } } return networkUtil; } class StringCallBack implements Callback { private HttpCallBack httpCallBack; private Request request; public StringCallBack(Request request, HttpCallBack httpCallBack) { this.request = request; this.httpCallBack = httpCallBack; } @Override public void onFailure(Call call, IOException e) { final IOException fe = e; if (httpCallBack != null) { handler.post(new Runnable() { @Override public void run() { httpCallBack.onError(request, fe); } }); } } @Override public void onResponse(Call call, Response response) throws IOException { final String result = response.body().string(); if (httpCallBack != null) { handler.post(new Runnable() { @Override public void run() { httpCallBack.onSuccess(request, result); } }); } } } public void asyncGet(String url, HttpCallBack httpCallBack) { Request request = new Request.Builder().url(url).build(); okHttpClient.newCall(request).enqueue(new StringCallBack(request, httpCallBack)); } public void asyncPost(String url, FormBody formBody, HttpCallBack httpCallBack) { Request request = new Request.Builder().url(url).post(formBody).build(); okHttpClient.newCall(request).enqueue(new StringCallBack(request, httpCallBack)); } public interface HttpCallBack { void onError(Request request, IOException e); void onSuccess(Request request, String result); } }
调用是这样子的:
这是某位大哥的操作,在网上找了很久了,一直没找到想要的。就是响应给我的数据怎么取出来,这下就很方便了,感谢!
这个封装是我觉得自己写的太麻烦,结果很巧就找到个合适的,我是在写一个摇一摇生成新闻的功能,经过不懈努力,还是颇有成效,明天把扫一扫弄完,后续改改界面,就可以交项目啦。不知道面试如果带这个去会不会被人家鄙视?
算来今天刚满21,比起去年,还是有很多收获的,至少现在凌晨一点的我终于不是在床上刷微博,玩游戏了。不管怎么说,自己现在没有颓废已经是很好的了,加油!