okhttp3.0

原创 2017年01月03日 18:00:39

Android你必须学会的okhttp3.0入门篇

 

简单说一下学习okhttp的理由

1. googleAndroid 6.0中删除了HttpClientApi,采用的是则是okhttp

2. 高效的使用HTTP,使应用运行更快更省流量

3. 响应缓存数据避免重复网络请求

4. 无缝的支持GZIP来减少数据流量

5. 使用非常简单,请求和响应的Api具有流畅的建造和不变性,同时支持同步异步调用回调函数

6. 如果网络出现问题,它会从常见的连接问题中恢复

7. 如果服务器配置有多个IP地址,当第一个IP连接失败,它会尝试连接下一个IP

以上是okhttp官网http://square.github.io/okhttp/以及结合网上的一些理解整理出来的,看到有不对的地方还望大家多多指出

下面我们就开始学习怎么使用okhttp

配置环境

github地址:https://github.com/square/okhttp

builde.gradle里面添加上

compile 'com.squareup.okhttp3:okhttp:3.4.1'

AndroidManifest.xml添加所需权限

<uses-permission android:name="android.permission.INTERNET" />

基本使用

· get异步请求

通过get请求获取指定URL网页请求,这里要注意的是Android4.0以后需要在非主线程里使用。

private OkHttpClient client = new OkHttpClient();pubic static void get(){

        //创建一个Request

        Request request = new Request.Builder()

                .url("http://www.jianshu.com/")

                .get()

                .build();

        //发起异步请求,并加入回调

        client.newCall(request).execute(new Callback()

        {

            @Override

            public void onFailure(Call call,IOException e){

                //请求失败回调

            }

            @Override

            public void onResponse(Call call,Response response) throws IOException{

                //请求成功回调

                Log.e("okHttp","get="+response.body().string());

            }

        })

    }

· post异步请求

    private OkHttpClient client = new OkHttpClient();

    public static void post(){

        //创建Form表单对象,可以add多个键值队

        FormBody formBody = new FormBody.Builder()

                .add("param","value")

                .add("param","value")

                .build();

        //创建一个Request

        Request request = new Request.Builder()

                .url("http://www.jianshu.com/")

                .post(formBody)

                .build();

        //发起异步请求,并加入回调

        client.newCall(request).enqueue(new Callback()

        {

            @Override

            public void onFailure(Call call,IOException e){

            }

            @Override

            public void onResponse(Call call,Response response) throws IOException{

                Log.e("okHttp","post="+response.body().string());

            }

        });

    }

· 同步请求

client.newCall(request).enqueue(new Callback())改成
client.newCall(request).execute().body().string()即可

· 文件上传与多文件上传

    public static void upload(){

        //多个文件集合

        List<File> list = new ArrayList<>();

        MultipartBody.Builder builder = new MultipartBody.Builder();

        //设置为表单类型

        builder.setType(MultipartBody.FORM);

        //添加表单键值

        builder.addFormDataPart("param","value");

        for (File file : list) {

            //添加多个文件

            RequestBody fileBody = RequestBody.create(MediaType.parse("application/octet-stream"), file);

            builder.addFormDataPart("files", file.getName(), fileBody);

        }

        Request request = new Request.Builder()

                .url("http://192.168.1.8/upload/UploadServlet")

                .post(builder.build())

                .build();

        //发起异步请求,并加入回调

        mOkHttpClient.newCall(request).enqueue(new Callback()

        {

            @Override

            public void onFailure(Call call,IOException e){

            }

            @Override

            public void onResponse(Call call,Response response) throws IOException{

                Log.e("okHttp","updLoad="+response.body().string());

            }

        });

    }

· 超时设置,整个程序应使用这一个mOkHttpClient对象

    public static void setTimeout(){

        mOkHttpClient.newBuilder()

                .connectTimeout(10, TimeUnit.SECONDS)//10秒连接超时

                .writeTimeout(10, TimeUnit.SECONDS)//10m秒写入超时

                .readTimeout(10, TimeUnit.SECONDS)//10秒读取超时

                .build();

    }

· 文件下载
其实很简单,只需要利用get同步或异步请求,然后通过
client.newCall(request).execute().body().byteStream()
获取InputStream输入流,写文件操作即可实现文件下载。

 

升级okhttp3.0+和retrofit2.0+的过程以及遇到的坑

包名变化 okhttp3.0之前是:com.squareup.okhttp.*, 而到3.0之后变成:okhttp3.* retrofit2.0之前:retrofit.* ...

okHttp3.0获取网络数据

okHttp3.0获取网络数据    听到okHttp以后首先查了一下goole浏览器等等(关于它的相关信息)还是根据了一个大牛(hongYang)的一些相关文档 根据他的文档进行一步步的做就完成...
  • naying_
  • naying_
  • 2017年04月19日 09:39
  • 480

网络请求框架(OKHttp3.0)

OKHttp实现网络请求之Get访问方式 OKHttp实现网络请求之Post访问方式同步方式: 第一种访问方式_提交键值对数据 服务端返回的数据,封装在ResponseBody响应体对象中,通...

Android volley 使用OkHttp3.0

本文仅介绍如何使用OKHttp3.0实现HttpStack,从而接管volley的网络请求。前言:volley ---- Google出品的android平台轻量级网络库          优点:扩展...
  • offbye
  • offbye
  • 2016年03月31日 09:31
  • 2057

OkHttp3.0入门教程

OkHttp3.0的入门教程

okhttp3.0之快速入门教程

第一次写博客,写的有什么不好地方;大家告诉我下哈,谢谢。 [TOC]一、主要类介绍 1. OkHttpClient 2. Request 3. Call 4. Response 二、如何使用G...

android OkHttp3.0介绍

OkHttp是一个高效的HTTP库: 1. 支持 SPDY ,共享同一个Socket来处理同一个服务器的所有请求 2. 如果SPDY不可用,则通过连接池来减少请求延时 3. 无缝的支持GZIP...
  • ye1831
  • ye1831
  • 2017年06月10日 22:29
  • 112

okhttp3.0学习

这几天学习了下okhttp的使用,公司的网络请求一直是使用的xutils。学习完okhttp基本的用法之后,想想觉得应该记录一下,加深下印象,也方便以后自己回头再来看。水平低,所以如果有同学看到这篇文...
  • LH0102
  • LH0102
  • 2017年03月22日 14:06
  • 134

OkHttp 3.0之后版本GET、POST请求以及POST上传文件的示例代码

转载请标明出处: http://blog.csdn.net/ming2316780/article/details/51598063 本文出自:【Android_Jerry的博客】首先说一下2....

网络请求之OKHttp3.0(工具类)

import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkIn...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:okhttp3.0
举报原因:
原因补充:

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