Android okHttp网络请求库详解

原创 2016年05月31日 16:35:50

okhttp 是一个 Java 的 HTTP+SPDY 客户端开发包,同时也支持 Android。需要Android 2.3以上。

特点

  • OKHttp是Android版Http客户端。非常高效,支持SPDY、连接池、GZIP和 HTTP 缓存。
  • 默认情况下,OKHttp会自动处理常见的网络问题,像二次连接、SSL的握手问题。
  • 如果你的应用程序中集成了OKHttp,Retrofit默认会使用OKHttp处理其他网络层请求。
  • 从Android4.4开始HttpURLConnection的底层实现采用的是okHttp.

用法

  1. 新建一个OkHttpClient对象
  2. 通过Request.Builder对象新建一个Request对象
  3. 返回执行结果

    • GET
private String get(String url) {
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url(url)
                .build();
        Response response = null;
        try {
            response = client.newCall(request).execute();
            return response.body().string();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

  • POST

POST需要使用RequestBody对象,之后再构建Request对象时调用post函数将其传入即可

private String post(String url) {
        OkHttpClient client = new OkHttpClient();

        RequestBody formBody = new FormEncodingBuilder()
                .add("user", "Jurassic Park")
                .add("pass", "asasa")
                .add("time", "12132")
                .build();
        Request request = new Request.Builder()
                .url(url)
                .post(formBody)
                .build();
        Response response = null;
        try {
            response = client.newCall(request).execute();
            return response.body().string();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

此外,post的使用方法还支持文件等操作,具体使用方法有兴趣的可以自行查阅

  • 对Gson的支持

okHttp还自带了对Gson的支持

  private Person gson(String url){
        OkHttpClient client = new OkHttpClient();
        Gson gson = new Gson();
        Request request = new Request.Builder()
                .url(url)
                .build();
        Response response = null;
        try {
            response = client.newCall(request).execute();
            Person person = gson.fromJson(response.body().charStream(), Person.class);
            return person;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

  • 异步操作

以上的两个例子必须在子线程中完成,同时okHttp还提供了异步的方法调用,通过使用回调来进行异步调用,然后okHttp的回调依然不在主线程中,因此该回调中不能操作UI

private void getAsync(String url) {
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url(url)
                .build();
        Response response = null;

        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Request request, IOException e) {

            }

            @Override
            public void onResponse(Response response) throws IOException {
                String result = response.body().string();
                Toast.makeText(getApplicationContext(),result,Toast.LENGTH_SHORT).show();
                //不能操作ui,回调依然在子线程
                Log.d("TAG", result);
            }
        });


    }

项目主页:http://www.open-open.com/lib/view/home/1435381866122

okhttp网络请求的简单示例

okhttp网络请求的功能还是比较强大的。这里这是简单的演示:字符串数据的请求和json数据的请求。AndroidStudio使用okhttp之前添加依赖就可以了:...
  • wenzhi20102321
  • wenzhi20102321
  • 2016年12月04日 12:38
  • 2007

Android 的OkHttp 网络请求框架的学习封装

自述:在此以前,自己从来没有写过博客,今天是第一次写,真心是有点小激动,正要下笔却不知道应该从何说起,若是写的不好,请各位见谅吧!关于网络请求,我自认为自己是一个菜鸟,没有任何经验,之前做的项目都是别...
  • liu_guizhou
  • liu_guizhou
  • 2016年10月28日 09:42
  • 5231

Android okHttp 实战(四):okHttp网络请求之缓存控制Cache-Control

原文地址:http://www.cnblogs.com/whoislcj/p/5537640.html 前面的学习基本上已经可以完成开发需求了,但是在项目中有时会遇到对请求做个缓存,当没网络的时候优...
  • u014031072
  • u014031072
  • 2016年12月29日 08:03
  • 1350

在android中使用OkHttp框架处理网络请求

OkHttp网络处理框架,分成下面几个使用过程: 1.Get: 同步Get private final OkHttpClient client = new OkHttpClient(); ...
  • baidu_26994091
  • baidu_26994091
  • 2016年07月19日 20:12
  • 1718

Android网络请求:OkHttp实战

android网络请求是个耗时的操作,一定要在子线程中运行,添加网络权限,目前有很多流行的网络框架。比如okhttp,volley,xutils等等。今天主要介绍okhttp的使用,后续分享给多,比如...
  • dzsw0117
  • dzsw0117
  • 2016年04月23日 21:45
  • 2113

以OKHttp为基础封装网络请求工具类

特点: 1)支持SPDY协议,共享一个socket来处理同一个服务器的所有请求。 2)无缝支持GZIP,来减少数据流量。 3)缓存相应数据来减少重复的网络请求。   网络协议: SPDY(...
  • chenrushui
  • chenrushui
  • 2016年09月19日 18:41
  • 2081

Android使用Retrofit+OkHttp实现网络请求

Android使用Retrofit+OkHttp实现网络请求
  • wjinhhua
  • wjinhhua
  • 2017年03月08日 21:24
  • 617

Android 网络请求库:okHttp

okhttp 是一个 Java 的 HTTP+SPDY 客户端开发包,同时也支持 Android。需要Android 2.3以上。 特点 OKHttp是Android版Http客户端。非...
  • Happy_Develop_
  • Happy_Develop_
  • 2017年01月11日 15:59
  • 158

RxAndroid+OKHttp进行网络请求

Rx(Reactive Extensions)指响应式编程,本质是观察者模式,是以观察者和订阅者为基础的异步响应方式,它是一种编程思想的突破。   Rxandroid有四个基本的概念:Observab...
  • chenrushui
  • chenrushui
  • 2016年09月19日 12:23
  • 2190

Android网络请求库okHttp进行post、get请求

OKHttp是一个Java 的 HTTP+SPDY 客户端开发包,同时也支持 Android。需要Android 2.3以上。 特点 OKHttp是Android版Http客户端。非常高效...
  • rongwenbin
  • rongwenbin
  • 2016年04月28日 10:47
  • 1108
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android okHttp网络请求库详解
举报原因:
原因补充:

(最多只允许输入30个字)