Okhttp3.0

作者: baby_honour | 来源:发表于2018-09-19 11:18 被阅读97次

原文:https://blog.csdn.net/m0_38143863/article/details/80220247

Okhttp3.0 execute
这是同步请求。对于同步请求在请求时需要开启子线程,请求成功后需要跳转到UI线程修改UI

new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                OkHttpClient client = new OkHttpClient();//创建OkHttpClient对象
                Request request = new Request.Builder()
                        .url("http://www.baidu.com")//请求接口。如果需要传参拼接到接口后面。
                        .build();//创建Request 对象
                Response response = null;
                response = client.newCall(request).execute();//得到Response 对象
                if (response.isSuccessful()) {
                Log.d("kwwl","response.code()=="+response.code());
                Log.d("kwwl","response.message()=="+response.message());
                Log.d("kwwl","res=="+response.body().string());
                //此时的代码执行在子线程,修改UI的操作请使用handler跳转到UI线程。
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

Okhttp3.0 enqueue
这是异步请求,所以调用enqueue则无需再开启子线程,enqueue方法会自动将网络请求部分放入子线程中执行。enqueue回调方法onResponse与onFailure都执行在子线程中,因此onResponse与onFailure中可以用runOnUiThread(new Runnable() {})来执行更新ui的操作。response.body().string()只能调用一次,在第一次时有返回值,第二次再调用时将会返回null,而且response.body().string()方法必须放在子线程中。当执行这行代码得到结果后,再跳转到UI线程修改UI。

注意事项:
1,回调接口的onFailure方法和onResponse执行在子线程。
注意事项:
2,Response.code是http响应行中的code,如果访问成功则返回200.这个不是服务器设置的,而是http协议中自带的。res中的code才是服务器设置的。注意二者的区别。
3,response.body().string()本质是输入流的读操作,所以它还是网络请求的一部分,所以这行代码必须放在子线程。
4,response.body().string()只能调用一次,在第一次时有返回值,第二次再调用时将会返回null。原因是:response.body().string()的本质是输入流的读操作,必须有服务器的输出流的写操作时客户端的读操作才能得到数据。而服务器的写操作只执行一次,所以客户端的读操作也只能执行一次,第二次将返回null。
5,再次强调,response.body().string()方法必须放在子线程中。当执行这行代码得到结果后,再跳转到UI线程修改UI。

OkHttpClient client = new OkHttpClient();
    Request request = new Request.Builder()
            .url("http://www.baidu.com")
            .build();
    client.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
        }
        @Override
        public void onResponse(Call call, Response response) throws IOException {
            if(response.isSuccessful()){//回调的方法执行在子线程。
                Log.d("kwwl","获取数据成功了");
                Log.d("kwwl","response.code()=="+response.code());
                Log.d("kwwl","response.body().string()=="+response.body().string());
            }
        }
    });

相关文章

  • Android网络框架

    Android OKHttp3.0 以上使用方法 Android OKHttp3.0 以上使用方法详解Retrof...

  • Okhttp3.0

    原文:https://blog.csdn.net/m0_38143863/article/details/8022...

  • okhttp学习

    OkHttp3.0封装框架,内部使用gson解析json数据 项目地址:https://github.com/op...

  • Github最火开源项目-OkHttp3Utils

    OkHttp3.0封装框架,内部使用gson解析json数据 项目地址:https://github.com/op...

  • 简述OkHttp3.0

    本文主要以源码形式解读OkHttp内部实现,源码基于okhttp:3.10.0。 同步请求 异步请求的例子 先看一...

  • OkHttp源码分析(一)

    因为项目集成,在使用Fresco的时候,有集成OkHttp,所以接下来是OkHttp3.0的 简单一个列子,其中里...

  • Android okhttp3.0 框架使用总结

    最近工作主要用到OkHttp3.0网络请求框架,进行Get请求,Post请求,多文件上传等功能,本文内容大部分来源...

  • Okhttp3.0 添加SSL证书

    okhttp作为Android最主要的网络请求框架之一,估计从事Android开发的小伙伴没有不知道的;okhtt...

  • Android框架学习笔记02AndroidAsycHttp框架

    上一篇中我们介绍了OkHttp3.0框架的基本使用方法,这一篇我们学习一下Android的另外一个网络请求框架——...

  • OkHttp3.0下载文件

    1 首先要在app/build.gradle中添加依赖,另外注意清单文件中打开相应网络访问权限如: 2 创建一个...

网友评论

      本文标题:Okhttp3.0

      本文链接:https://www.haomeiwen.com/subject/kbobnftx.html