设为首页 加入收藏

TOP

okhttp教程——起步篇(一)
2017-10-12 18:11:33 】 浏览:8151
Tags:okhttp 教程 起步

okhttp教程——起步篇

这篇文章主要总结Android著名网络框架-okhttp的基础使用,后续可能会有关于他的高级使用。

okhttp是什么

okhttp是Android端的一个Http客户端,其基础功能相当于Android自带的HttpURLConnectionApache HTTP Client,但他却比自带的2个Http客户端优越很多,一者是写法简单,二者okhttp处理很多网络复杂问题,如会从很多常用的连接问题中自动恢复。如果您的服务器配置了多个IP地址,当第一个IP连接失败的时候,OkHttp会自动尝试下一个IP。OkHttp还处理了代理服务器问题和SSL握手失败等等很多问题。关于第二者,这篇文章不讨论。

okhttp的导入

Gradle导入

 compile 'com.squareup.okhttp3:okhttp:3.2.0'
 compile 'com.squareup.okio:okio:1.6.0'

okhttp基础使用

这里我们主要介绍简单的使用,介绍内容如下

  1. get请求
  2. post请求,参数是键值对
  3. post请求,多种类型的body
  4. 文件下载
  5. 加入Gson

get请求

get请求分为同步get和异步get,两者的区别主要get的方式是工作在另一个线程还是工作在本线程。请求的方式大同小异。
首先定义一个OkHttpClient对象,如下

private OkHttpClient client = new OkHttpClient();

然后构建一个Request,构建方式如下:

Request request = new Request.Builder().
url("http://www.baidu.com").
build();

这个是最简单的request的构建方式,当然我们可以构建的很复杂。

 Request request = new Request.Builder().
               url("http://www.baidu.com").
               addHeader("User-Agent","android").
              header("Content-Type","text/html; charset=utf-8").
              build();

通过addHeader和header方法为请求增加请求头部,注意使用header(name, value)可以设置唯一的name、value。如果已经有值,旧的将被移除,然后添加新的。使用addHeader(name, value)可以添加多值(添加,不移除已有的)。

同步的get方法,通过client.newCall(request).execute()方法得到请求的response.

 Response response = okHttpClient.newCall(request).execute();

OkHttp封装了很多处理response的方法,比如response.headers()的得到headers.

Headers headers = response.headers();
 for (int i = 0; i < headers.size(); i++) {
System.out.println(headers.name(i) + ": " + headers.value(i)); }

结果如下:

Date: Mon, 18 Apr 2016 05:23:43 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: Keep-Alive
Vary: Accept-Encoding
Set-Cookie: BAIDUID=A323EC9BF678C0EB78E20741FD71211B:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: BIDUPSID=A323EC9BF678C0EB78E20741FD71211B; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: PSTM=1460957023; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: BDSVRTM=0; path=/
Set-Cookie: BD_HOME=0; path=/
Set-Cookie: H_PS_PSSID=1434_19672_18281_19690_17948_18205_19558_15952_12257; path=/; domain=.baidu.com
P3P: CP=" OTI DSP COR IVA OUR IND COM "
Cache-Control: private
Cxy_all: baidu+2db7793e0e32b9f6c20be8f623e1ae43
Expires: Mon, 18 Apr 2016 05:22:55 GMT
X-Powered-By: HPHP
Server: BWS/1.1
X-UA-Compatible: IE=Edge,chrome=1
BDPAGETYPE: 1
BDQID: 0xfacc6fc10004ca96
BDUSERID: 0
OkHttp-Sent-Millis: 1460957021226
OkHttp-Received-Millis: 1460957021430

响应报文的实体可以通过response.body().string()获取;如果希望获得返回的二进制字节数组,则调用response.body().bytes();如果你想拿到返回的inputStream,则调用response.body().byteStream()。

异步的get请求得到的response方法是通过如下方法

okHttpClient.newCall(request).enqueue(new Callback() {
                        @Override
                        public void onFailure(Call call, IOException e) {
                        }       
                        @Override
                        public void onResponse(Call call, Response response) throws IOException {
                        }
              });

在onResponse方法中,执行请求成功的代码,onFailure方法中,执行请求失败的代码,下面给一个完整的异步get的栗子

import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.text.method.ScrollingMovementMethod;
i
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇安卓开发树形控件之ExpandableLis.. 下一篇android 图片加载库 Glide 的使用..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目