欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android 开发 框架系列 OkHttp使用详解

程序员文章站 2022-03-09 21:05:03
...

简介

okhttp是一个第三方类库,用于android中请求网络。这是一个开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso和LeakCanary) 。用于替代HttpUrlConnection和Apache HttpClient(android API23 里已移除HttpClient)。

Android studio工程依赖:

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

同步请求方式(get请求)

步骤一  创建请求接口网址

我使用了http://www.sosoapi.com/ 来创建了一个访问接口,用来验证OkHttp是否请求成功。如果你有兴趣了解,可以直接进入网站,里面有详细的demo演示。后续我将不在赘述这段。

我在请求响应里添加了一段JSON数据:

[
    {
        "name": "get测试",
        "content": "你成功获取了数据"
    }
]

步骤二  创建JSON解析方法

这里我写一下解析JSON数据的方法,来解析get或者post得到的JSON数据。后续我将不在赘述这段。

/**
     * JSON 解析方法
     * @param jsonData
     * @return
     */
    public String readJSONContent(String jsonData){
        try {
            StringBuffer sb = new StringBuffer();
            JSONArray jsonArray = new JSONArray(jsonData);
            for (int i=0;i<jsonArray.length();i++){
                JSONObject jsonObject = jsonArray.getJSONObject(i);
                sb.append(jsonObject.getString("name")+"\n");
                sb.append(jsonObject.getString("content")+"\n");
            }
            return sb.toString();
        } catch (JSONException e) {
            Log.e("JSONException错误", "readContent: "+e.toString());
            return e.toString();
        }
    }

步骤三  创建OkHttp 同步请求

/**
     * 同步请求
     */
    public void synchro(){
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                OkHttpClient okHttpClient = new OkHttpClient();//创建单例
                Request request = new Request.Builder()//创建请求
                        .url("http://www.sosoapi.com/pass/mock/12003/test/gettest")
                        .build();
                try {
                    Response response = okHttpClient.newCall(request).execute();//执行请求
                    mContent = response.body().string();//得到返回响应

                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            mtextView.setText(readJSONContent(mContent));
                        }
                    });
                } catch (IOException e) {
                    e.printStackTrace();
                    Log.e("OkHttpActivity", e.toString() );
                }
            }
        });
        thread.start();
    }

效果图:

Android 开发 框架系列 OkHttp使用详解

异步请求方式(get请求)

其他步骤与上面一致,这里不重复了。剩下步骤如下

创建异步请求

     /**
     * get异步请求
     */
      public void asynchronous(){
          OkHttpClient okHttpClient = new OkHttpClient();
          Request request = new Request.Builder()
                  .url("http://www.sosoapi.com/pass/mock/12003/test/gettest")
                  .build();
          okHttpClient.newCall(request).enqueue(new Callback() {
              @Override
              public void onFailure(Call call, IOException e) {
                  //失败回调

              }

              @Override
              public void onResponse(Call call, final Response response) throws IOException {
                  //响应成功,这个回调在子线程中,所以不需要创建线程
                  if (response.isSuccessful()){
                      //isSuccessful方法:如果代码位于(200…300)中,则返回true,这意味着请求已成功接收
                      runOnUiThread(new Runnable() {
                          @Override
                          public void run() {
                              try {
                                  //因为在子线程,所以我们需要回到主线程中更新UI数据
                                  mtextView.setText(readJSONContent(response.body().string()));
                              } catch (IOException e) {
                                  e.printStackTrace();
                              }
                          }
                      });
                  }
              }
          });
      }

Post请求

post请求也同时有同步与异步方法,与上面一致,所以这里就不展示了,下面我们来看看post请求发送

/**
     * post请求
     */
    public void post(){
        new Thread(new Runnable() {
            @Override
            public void run() {
                //实例
                OkHttpClient okHttpClient = new OkHttpClient();

                //创建post请求数据表单
                RequestBody requestBody = new FormBody.Builder()
                        .add("name","请求post")
                        .add("password","123456")
                        .build();
                //创建请求
                final Request request = new Request.Builder()
                        .url("http://www.sosoapi.com/pass/mock/12003/test/posttest")
                        .post(requestBody)//添加post请求
                        .build();

                try {
                    //发送请求得到响应
                    final Response response = okHttpClient.newCall(request).execute();
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            try {
                                mtextView.setText(readJSONContent(response.body().string()));
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                    });
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        }).start();

    }

效果图:

Android 开发 框架系列 OkHttp使用详解

相关标签: android