Android 中Okhttp的同步请求与异步请求

Posted 路宇_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 中Okhttp的同步请求与异步请求相关的知识,希望对你有一定的参考价值。

同步请求与异步请求的概念:

简单地说,同步就是发出一个请求后什么事都不做,一直等待请求返回后才会继续做事;异步就是发出请求后继续去做其他事,这个请求处理完成后会通知你,这时候就可以处理这个回应了。

写了个Demo去理解Okhttp中的get同步请求与异步请求,和post同步请求与异步请求
在这里插入图片描述
1.get的同步请求,其中的讲解,已经在代码中注释了出来。

//get同步请求
    public void getSync(View view) {
        //在android 中完成网络请求必须在子线程中完成
        new Thread(new Runnable() {
            @Override
            public void run() {
                OkHttpClient okHttpClient = new OkHttpClient();
                Request request = new Request.Builder().url("http://www.httpbin.org/get?a=1&b=2").build();
                //准备好请求的Code对象
                Call call = okHttpClient.newCall(request);
                try {
                    //同步请求要创建子线程,是因为execute()方法,会阻塞后面代码的执行
                    //只有执行了execute方法之后,得到了服务器的响应response之后,才会执行后面的代码
                    //所以同步请求要在子线程中完后
                    Response response = call.execute();
                    //把服务器给我们响应的字符串数据打印出来
                    Log.i(TAG,"getSync:"+response.body().string());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

2.get异步请求:

//get的异步请求
    public void getAsync(View view) {
        //定义okhttp对象
        OkHttpClient okHttpClient = new OkHttpClient();
        Request request = new Request.Builder().url("http://www.httpbin.org/get?a=1&b=2").build();
        Call call = okHttpClient.newCall(request);
        //异步请求:不用创建子线程
        //enqueue()并不会阻塞代码的执行,不需要与服务器请求完成之后,才会执行后面的代码
        //而且enqueue内部会为我们创建子线程
        call.enqueue(new Callback() {
            @Override
            public void onFailure(@NotNull Call call, @NotNull IOException e) {
            }

            @Override
            public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
                if (response.isSuccessful()){
                    Log.i(TAG,"getAsync:"+response.body().string());
                }
            }
        });

    }

3.post同步请求:

 //post同步请求
    public void postSync(View view) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                OkHttpClient okHttpClient = new OkHttpClient();
                //post请求规定,把参数放在请求体里面,用form表单的方式来添加我们的请求体
                FormBody formBody = new FormBody.Builder().add("a", "10000").add("b", "15000").build();
                Request request = new Request.Builder().url("http://www.httpbin.org/post")
                        .post(formBody)
                        .build();
                Call call = okHttpClient.newCall(request);
                try {
                    Response response = call.execute();
                    Log.i(TAG,"postSync:"+response.body().string());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

4.post的异步请求:

 //post异步请求
    public void postAsync(View view) {
        OkHttpClient okHttpClient = new OkHttpClient();
        FormBody formBody = new FormBody.Builder().add("a", "1000").add("b", "2000").build();
        Request request = new Request.Builder().url("http://www.httpbin.org/post")
                .post(formBody)
                .build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(@NotNull Call call, @NotNull IOException e) {

            }

            @Override
            public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
                if (response.isSuccessful()){
                    Log.i(TAG,"postAsync:"+response.body().string());
                }
            }
        });
    }

上面用到的http服务器是公用的,需要的拿去用:地址www.httpbin.org/

以上就是Okhttp框架的简单实用~,如有不当之处,还望各位网友加以指正!

以上是关于Android 中Okhttp的同步请求与异步请求的主要内容,如果未能解决你的问题,请参考以下文章

Android okhttp的同步与异步请求

Android:OkHttp同步和异步请求流程的理解和使用

OkHttpOkHttp Get 和 Post 请求 ( 同步 Get 请求 | 异步 Get 请求 | 同步 Post 请求 | 异步 Post 请求 )

OkHttp 在 Android 中怎么发送异步请求

OkHttpOkHttp 源码分析 ( 同步 / 异步 Request 请求执行原理分析 )

Android 进阶之探索 OkHttp 原理