Android自学历程—手把手教你使用OkHttp(基础篇)
2016-07-13 23:14
465 查看
Android自学历程—手把手教你使用OkHttp(基础篇)
安装
在使用OkHttp前,我们需要先导入OkHttp的第三方库。我们可以在Github上找到她的项目地址: https://github.com/square/okhttp
我们可以在Android Studio中使用Gradle, 最后效果如下:
测试使用我们的OKHttp第三方库
1.第一步我们需要去创建一个 OKHttpClient 对象
OkHttpClient okHttpClient = new OkHttpClient();
2.下一步我们还需要一个 Request 对象,她可以已如下方式被创建
Request request = new Request.Builder() .url(requestUrl) .build();
requestUrl是一个字符串变量代表这个URL是为了JSON请求(The requestUrl is
a String variable representing the Url for the JSON request.)
在这个测试中,我们将会使用如下的URl:http://iheartquotes.com/api/v1/random?format=json
3.再下一步我们需要实例化一个 Call 对象
Call call = okHttpClient.newCall(request);
Call对象会取走我们的 okHttpClient对象 和 我们的 request对象。
4.在实例化Call对象后,我们现在可以 Execute(执行)她。Executing一个Call后将会返回一个 Response,并且会抛出一个 IOException的异常,这就是为什么们会用一个try,catch块包裹她。
try{ Response response = call.execute(); }catch (IOException e){ e.printStackTrace(); }
5.执行完我们的Call后,我们需要通过使用 response.isSuccessful()来检查Call对象是否执行成功,
通过response.isSuccessful()的返回值为true或者是false来判断。
这我们仅仅是一个测试,如果Call成功的话,我们将会通过Log来打印我们的response。
try{ Response response = call.execute(); if(response.isSuccessful()){ //The call was successful.print it to the log Log.v("OKHttp",response.body().string()); } }catch(IOException e){ e.printStackTrace(); }
6.测试Code!
这是新手一个常见的错误。在Android中不允许任何网络的交互在主线程中进行。It disallows it to force developers to use asynchronous callbacks.(能力有限这句话不敢强译)。但是现在,我们的代码看起来看起来十分的号好!下面我们来看看如何修复这个问题。
7.Fix issue
为了修补这个问题,我们只需要让我们的Call执行在非主线程内,所以利用一个 asynchronouscallback(异步的callBack)。
让我们call异步的方法是通过调用我们Call对象的 enqueue()方法。
call.enqueue(new Callback()) { @Override public void onFailure( Request request, IOException e ) { } @Override public void OnResponse( Response response) throws IOException { try { if(response.isSuccessful()){ //The call was successful. print it to the log log.v("OKHttp",response.body.string()); } }catch (IOException e) { e.printStackTrace(); } } });
8.在我们再次执行我们的code之前,我们还需要再改一改。如果我们想要现在执行她,我们可能还会接收到错误的提示,因为我们应用的程序没有得到相应的相应的网络权限。所以我们需要再AndroidManifest.xml中添加应用权限。
<uses-permission android:name="android.permission.INTERNET"/>
9.当我们执行完code后,我们将接受到如下的log输出:
10.This means, we are now able to execute asynchronous network calls and use the data inside the callback method, when it is ready!
onResponse回调的参数是response,一般情况下,比如我们希望获得返回的字符串,可以通过response.body().string()获取;如果希望获得返回的二进制字节数组,则调用response.body().bytes();如果你想拿到返回的inputStream,则调用response.body().byteStream()
看到这,你可能会奇怪,竟然还能拿到返回的inputStream,看到这个最起码能意识到一点,这里支持大文件下载,有inputStream我们就可以通过IO的方式写文件。不过也说明一个问题,这个onResponse执行的线程并不是UI线程。的确是的,如果你希望操作控件,还是需要使用handler等
写完后,瞬间爽朗起来。虽然还有问题。
译文来自:https://gsaar.me/tutorial/android-tutorial-part-5-using-okhttp/
http://www.skholingua.com/android-basic https://github.com/square/okhttp/wiki/Recipes
相关文章推荐
- 在视觉上的卷积神经网络及应用知识
- http://www.oreilly.com/catalog/errataunconfirmed.csp?isbn=9780596529321
- Http缓存
- React-native fetch请求网络
- 使用nginx搭建https服务
- VC++多线程tcp connect扫描
- 【LoadRunner】Web(HTTP/HTML)协议的关联
- android网络框架xutils
- 网络socket编程指南
- HTTP状态码
- HTTP协议三--断点续传
- android网络框架android-async-http
- linux网络编程基础API
- Synopsys发布Coverity 8.5 支持网络和移动应用(Android Security)、增强软件质量与可靠性
- 神经网络中的参数的求解:前向和反向传播算法
- TCP/IP协议栈的网络层的主要功能是通过( )来完成的。
- asp.net HttpModule和HttpHandler
- Tomcat 配置https
- 关于ajax网络请求的封装
- 朴素贝叶斯与贝叶斯网络