一起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)