一起Talk Android吧(第三百三十八回: Android中的OkHttp一)

Posted talk_8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起Talk Android吧(第三百三十八回: Android中的OkHttp一)相关的知识,希望对你有一定的参考价值。

各位看官们,大家好,上一回中咱们说的是android中Volley的例子,这一回中咱们说的例子是Android中的OkHttp。闲话休提,言归正转。让我们一起Talk Android吧!

看官们,我们在本章回中介绍另外一种HTTP库:OkHttp。它由三方公司提供,不过由于它出色的优势也得到了Android官方的认可。下面是它的优点:

  • 支持HTTP2
  • 拥有队列线程池对并发处理比较好
  • 使用缓存策略,对请求和响应处理比较好

使用步骤

接下来我们介绍如何在程序中使用okhttp库:

  • 1.导入库,可以使用窗口方式导入,或者直接在build.gradle中填写依赖;
  • 2.创建OkHttpClient对象,可以使用默认的配置,也可以自定义Client参数;
  • 3.创建Request对象,通过build创建(程序中有多种创建方法),可以设置请求类型(GET/POST等)
  • 4.使用OkHttpClient对象和Request对象创建call对象;
  • 5.使用call对象的execute()方法开始同步请求,需要处理异常,而且还需要单独启动线程,不能在主线程中发起同步请求;
  • 6.在execute()方法的返回结果中获取服务器对请求的响应结果;
  • //发起异步请求的步骤与发起同步请求的步骤只有这一步不同,其它步骤完全一致
  • 6.使用call的enqueue()方法开始异步请求,需要重写回调方法,在回调方法中获取服务器对请求的响应结果;
  • 7.取消call;

示例代码

光说不练不是我们的风格,下面是程序的示例代码,请大家参考:

   private void initOkHttpRequest() 
        mOkHttpClient = new OkHttpClient();
        //自定义Client参数
//        mOkHttpClient = new OkHttpClient.Builder()
//                .readTimeout(1*3000, TimeUnit.MILLISECONDS)
//                .writeTimeout(1*5000,TimeUnit.MILLISECONDS)
//                .build();
        //使用method方法创建Request
        mRequest = new okhttp3.Request.Builder()
                .method("GET",null)
                .build();

        //使用get方法创建Request
        mRequest = new okhttp3.Request.Builder()
                .get()
                .url(HTTP_URL)
                .build();
        //使用post方法创建Request,内容在requestbody中
        mRequest = new okhttp3.Request.Builder()
                .post(new RequestBody() 
                    @Override
                    public MediaType contentType() 
                        return null;
                    

                    @Override
                    public void writeTo(BufferedSink sink) throws IOException 

                    
                )
                .url(HTTP_URL)
                .build();
        mCall = mOkHttpClient.newCall(mRequest);
    

    private void sendSyncOkHttpRequest() 
        if(mCall != null) 
               new Thread(new Runnable() 
                    @Override
                    public void run() 
                        try 
                            okhttp3.Response response = mCall.execute();
                            Log.d(TAG, "sendOkHttpRequest: result is: "+response.body().string());
                        catch (Exception e) 
                            Log.d(TAG, "sendOkHttpRequest: Exception:"+e);
                        
                    
                ).start();
        
    

    private void sendAsyncOkHttpRequest() 
        if(mCall != null) 
            mCall.enqueue(new Callback() 
                @Override
                public void onFailure(Call call, IOException e) 
                    Log.d(TAG, "onFailure:  "+e.toString());
                

                @Override
                public void onResponse(Call call, okhttp3.Response response) throws IOException 
                    if(response.cacheResponse() != null) 
                        Log.d(TAG, "onResponse:  result(catch) is: "+response.cacheResponse().toString());
                    else 
                        Log.d(TAG, "onResponse:  result is: "+response.networkResponse().toString());
                    
                
            );
       
    

    if(mCall != null) 
        mCall.cancel();
    

上面的程序只有主要功能的代码,其它代码省略了,此外,页面布局中只有一个Button,与布局相关的代码大家可以自已补充,我们在这里就不列出了。建议大家自己动手运行程序,通过程序的运行结果查看网站对HTTP请求的响应。关于上面的代码还有以下注意事项:

  • 1.在manifest文件中添加网络权限,不然会在运行程序会发生异常;
  • 2.在Java项目中okhttp的版本需要4.0以下才可以,4.0以上版本使用kotlin语言;
  • 3.创建OkHttpClient对象时可以使用默认的设置,也可以自定义超时等参数;
  • 4.Request对象有多种创建方法,可以依据需要自行选择,主要是把请求类型选择好就可以;
  • 5.发起同步请求时需要创建子线程,发起异步请求则不需要;

看官们,关于Android中OkHttp的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

以上是关于一起Talk Android吧(第三百三十八回: Android中的OkHttp一)的主要内容,如果未能解决你的问题,请参考以下文章

一起Talk Android吧(第三百八十八回:lifecycle)

一起Talk Android吧(第三百八十八回:lifecycle)

一起Talk Android吧(第三百三十六回: Android中的volley一)

一起Talk Android吧(第三百七十八回:给ViewPager添加indicator)

一起Talk Android吧(第三百三十九回: Android中的OkHttp二)

一起Talk Android吧(第三百四十八回:解析JSON数组三)