手把手教你使用Android

    作者:课课家教育更新于: 2016-04-15 15:50:02

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

    手把手叫你使用Android _自学Android _Android Studio_Android_课课家

          安装

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

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

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

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

      

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

      

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

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

      

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

      

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

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

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

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

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

      6.测试Code!

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

      7.Fix issue

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

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

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

      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!

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

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

课课家教育

未登录

1