OkHTTP封装——get+post

二话不说直接上代码:

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(或者CD等)正在用这个方法(或者该类的其他同步方法)     * 有的话要等正在使用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,比起去年,还是有很多收获的,至少现在凌晨一点的我终于不是在床上刷微博,玩游戏了。不管怎么说,自己现在没有颓废已经是很好的了,加油!



猜你喜欢

转载自blog.csdn.net/Jay_zjc/article/details/80796318