android-studio手把手视频,手把手叫你使用Android _自学Android _Android Studio_Android_课课家...

http是现在主流应用使用的网络请求方式, 用来交换数据和内容, 有效的使用HTTP可以使你的app 变的更快和减少流量的使用而OkHttp 是一个很棒HTTP客户端,它支持SPDY, 也可以合并多个到同一个主机的请求,在使用连接池技术可以减少请求的延迟(如果SPDY是可用的话),使用GZIP压缩可以减少传输的数据量,缓存响应可以避免重复的网络请求。

6e3ceb33b0d94424a025dfdfcebd9765.png

安装

在使用OkHttp前,我们需要先导入OkHttp的第三方库。我们可以在搜索网上下载Github。

我们可以在Android Studio中使用Gradle, 最后效果如下:

aced1bc255284860fc53db60b31fa689.png99f4676e2bf58c7e9b41668922b50652.png

测试使用我们的OKHttp第三方库

1.第一步我们需要去创建一个 OKHttpClient 对象

e975bea4be4e821aa7e349d2a1e261d2.png

2.下一步我们还需要一个 Request 对象,她可以创建方式可以像下面这种

1a7db7c1be79b7e2e6c2135846b914a3.png

requestUrl是一个字符串变量代表这个URL是为了JSON请求(The requestUrl is a String variable representing the Url for the JSON request.)

在这个测试中,我们将会使用如下的URl:

74926426af8845afebd11309436bdf60.png

3.再下一步我们需要实例化一个 Call 对象

51779ef06230d2aaf7acb73ac465e5c2.png

okHttpClient对象和request对象会被Call对象会取走 。

4.在实例化Call对象后,我们现在可以 Execute(执行)她。Executing一个Call后将会返回一个 Response,并且会抛出一个 IOException的异常,这就是为什么们会用一个try,catch块包裹她。

7f1677e6f5360b6247ac17f1050fdc3d.png

5.执行完Call后,我们需要通过使用 response.isSuccessful()来检查Call对象是已经否执行成功,

我们可以通过response.isSuccessful()的返回值true或者false来判断是否成功。

这我们仅仅是一个测试,如果Call成功的话,我们将会通过Log来打印我们的response。

ecd0229d0c49f130313178a722264d1a.png

6.测试Code!

936b42875f6f25378ac7c662b4bf871a.png

这是新手经常犯的错误。在Android中是不允许任何网络的交互在主线程中进行。It disallows it to force developers to use asynchronous callbacks.。下面我们来看看如何修复这个代码所犯的问题。

7.Fix issue

为了修补这个问题,只需要Call执行在非主线程内,利用一个 asynchronous callback(异步的callBack)。

然后使用call异步的方法来通过调用我们Call对象的 enqueue()方法。

e2ba7b03bc1d41a15914363aff68d040.png

8.在我们再次执行code之前,我们还需要再做一下修改。若想要现在执行,我们也可能还会接收到错误的提示,因为我们应用的程序没有得到相对应的网络权限。所以我们需要再AndroidManifest.XML中添加应用权限。

e5bdf0b68c9b403cb3aa8efa2a5dcdef.png

9.当执行完code后,我们将接受到如下的log输出:

04b21f1a19115b80978f2b5132b3a4dc.png

10.This means, we are now able to execute asynchronous NETwork calls and use the data inside the callback method, when it is ready!

response是onResponse回调的参数,通常情况下,我们希望获得返回的字符串,可以通过response.body().string()获取;如果希望获得返回的二进制字节数组,则调用response.body().bytes();如果你想拿到返回的inputStream,则调用response.body().byteStream()

学习到这里时,也许你会有疑问,inputStream竟然还能返回,但在这你至少能意识到,这里已经支持大文件的下载,有了inputStream我们也就可以通过IO的方式写文件,但是onResponse执行的线程并不是UI线程,这一点希望能分辨开。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值