码迷,mamicode.com
首页 > Web开发 > 详细

okhttp3 get post 简单封装

时间:2016-04-26 08:21:44      阅读:551      评论:0      收藏:0      [点我收藏+]

标签:

最近打算在新项目中使用 okhttp3, 简单封装了一下异步 get post 

因为 CallBack 也是在子线程中执行,所以用到了 Handler

public class MyOkHttpClient {
    private static MyOkHttpClient myOkHttpClient;
    private OkHttpClient okHttpClient;
    private Handler handler;

    private MyOkHttpClient() {
        okHttpClient = new OkHttpClient();
        handler = new Handler(Looper.getMainLooper());
    }

    public static MyOkHttpClient getInstance() {
        if (myOkHttpClient == null) {
            synchronized (MyOkHttpClient.class) {
                if (myOkHttpClient == null) {
                    myOkHttpClient = new MyOkHttpClient();
                }
            }
        }

        return myOkHttpClient;
    }

    public void asyncGet(String url, final HttpCallBack httpCallBack) {
        final Request request = new Request.Builder().url(url).build();
        okHttpClient.newCall(request).enqueue(new Callback() {
            @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 asyncPost(String url, FormBody formBody, final HttpCallBack httpCallBack) {
        final Request request = new Request.Builder().url(url).post(formBody).build();
        okHttpClient.newCall(request).enqueue(new Callback() {
            @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 interface HttpCallBack {
        void onError(Request request, IOException e);

        void onSuccess(Request request, String result);
    }
}

使用

FormBody formBody = new FormBody.Builder().add("username", "lesiefang").add("age", "28").build();
MyOkHttpClient.getInstance().asyncPost("http://192.168.94.131:5000/aaa/", formBody, new MyOkHttpClient.HttpCallBack() {
    @Override
    public void onError(Request request, IOException e) {
        Log.d("aaa", e.toString());
    }

    @Override
    public void onSuccess(Request request, String result) {
        textView.setText(result);
    }
});

至于上传文件、下载文件什么的用到时再封装一个类似的方法就行了

 

okhttp3 get post 简单封装

标签:

原文地址:http://www.cnblogs.com/lesliefang/p/5433596.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!