android网络框架之OKhttp,一个处理网络请求的开源项目,是安卓端最火热的轻量级框架。android在开发的时候很少直接与数据库打交道,所以就有了通过接口的方式使android与数据库间接通信,通信方式就是使用okhttp插件。

1 okhttp的环境配置

implementation 'com.squareup.okhttp3:okhttp:4.9.0'

并且在清单文件中打开网络权限

2 OkHttp介绍

OkHttp分为get和post请求,在这两种请求中又分为同步和异步的请求。同步的意思就是得等到服务器有相应才会继续往下走,所以同步的方式都需要开启一个线程。

2.1 okhttp get的同步请求

    //注意网络同步请求必须要有一个子线程
    //get同步请求
    public void getSync(View view) {
      new Thread(){
          @Override
          public void run() {
              //get请求参数可以直接写在url后面
              //https://www.httpbin.org/get为开源测试网址
              Request request = new Request.Builder().url("https://www.httpbin.org/get?a=1&b=2").build();
              //请求的call对象
              Call call=okHttpClient.newCall(request);
              try{
                  Response response =call.execute();
                  Log.e("get同步请求:", "getSync:"+response.body().string() );
              }catch (IOException e){
                  e.printStackTrace();
              }
          }
      }.start();
   }

2.2 okhttp get的异步请求

 //异步不需要创建线程
    public void getAsync(View view) {
        Request request = new Request.Builder().url("https://www.httpbin.org/get?a=1&b=2").build();
        //请求的call对象
        Call call=okHttpClient.newCall(request);
        //异步请求
        call.enqueue(new Callback() {
            //失败的请求
            @Override
            public void onFailure(@NonNull Call call, @NonNull IOException e) {

            }
            //结束的回调
            @Override
            public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
                //响应码可能是404也可能是200都会走这个方法
                if(response.isSuccessful()){
                    Log.e("get异步请求:", "getASync:"+response.body().string() );
                }
            }
        });
    }

2.3 okhttp post的同步请求

 //okp默认是get请求,post需要有请求体,即formBody
    public void postSync(View view) {
        new Thread(){
            @Override
            public void run() {
                FormBody formBody = new FormBody.Builder().add("a", "1").add("b", "2").build();
                Request request = new Request.Builder().url("https://www.httpbin.org/post")
                        .post(formBody)
                        .build();
                //请求的call对象
                Call call=okHttpClient.newCall(request);
                try{
                    Response response =call.execute();
                    Log.e("pot同步请求", "postSync:"+response.body().string() );
                }catch (IOException e){
                    e.printStackTrace();
                }
            }
        }.start();
    }

2.4okhttp post的异步请求

public void postAsync(View view) {
        FormBody formBody = new FormBody.Builder().add("a", "1").add("b", "2").build();
        Request request = new Request.Builder().url("https://www.httpbin.org/post")
                .post(formBody)
                .build();
        Call call=okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(@NonNull Call call, @NonNull IOException e) {

            }
            @Override
            public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
                if(response.isSuccessful()){
                    Log.e("pot异步请求", "postASync:"+response.body().string() );
                }
            }
        });
    }

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐