OkHttp基本使用方式

来源:互联网 发布:plc与单片机应用场合 编辑:程序博客网 时间:2024/04/30 02:45

okhttp 简介

OkHttpSquare出品的HTTP请求库
Android系统提供了两种HTTP通信类,HttpURLConnection和HttpClient。

尽管Google在大部分安卓版本中推荐使用HttpURLConnection,但是这个类相比HttpClient实在是太难用,太弱爆了。
OkHttp是一个相对成熟的解决方案,据说Android4.4的源码中可以看到HttpURLConnection已经替换成OkHttp实现了。所以我们更有理由相信OkHttp的强大。

OkHttp 处理了很多网络疑难杂症:会从很多常用的连接问题中自动恢复。如果您的服务器配置了多个IP地址,当第一个IP连接失败的时候,OkHttp会自动尝试下一个IP。

OkHttp还处理了代理服务器问题和SSL握手失败问题。

使用OkHttp 无需重写您程序中的网络代码。OkHttp实现了几乎和java.net.HttpURLConnection一样的API。如果你用了 Apache HttpClient,
则OkHttp也提供了一个对应的okhttp-apache模块。

那么okhttp都能实现些什么功能呢?
一般的get请求
一般的post请求
基于Http的文件上传
文件下载
加载图片
支持请求回调,直接返回对象、对象集合
….......


本篇博客只讲解使用最多的get请求和post请求,以及简单的封装,对于刚接触okhttp的同学来说比较简单易懂。
首先,你需要在你的build.gradle中的dependencies里添加:
compile 'com.squareup.okhttp3:okhttp:3.4.1'//以最新的版本为准

Get请求
    OkHttpClient   client=new OkHttpClient();        Request request=new Request.Builder().url(path).build();        Call call=client.newCall(request);        call.enqueue(new Callback() {        //失败        @Override        public void onFailure(Call call, IOException e) {        }        //成功        @Override        public void onResponse(Call call, Response response) throws IOException {            //返回String            String json=response.body().string();            //返回byte[]                        response.body().bytes();            //返回流                        response.body().byteStream();        }    });
okhttpclient :okthttp主要类,客户端
Request:请求服务端Request.Builder():建造者设计模式:将一个复杂的对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示url(path):输入你的接口地址build:结束,返回Request对象
Call 将你的请求封装成任务  
call.enqueue请求调度,回调出两个方法,一个成功,一个失败,成功的话可以通过response来获取你要的数据类型,可以是string
可以是byte【】,可以是流,一般都是返回string的json字符串

Post请求
//okhttpclient :okthttp主要类OkHttpClient client=new OkHttpClient();/*RequestBody:请求体,携带参数去服务端访问FormBody:设置表单参数,用它来设置要携带的参数FormBody.Builder():设计模式:将一个复杂的对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示
add():你要携带的参数,key , value形式,可以添加多个
build:结束,返回一个RequestBody */
RequestBody body=new FormBody.Builder().add("name","xiaoming").add("age","18").build();
//创建Request
Request request=new Request.Builder().url(path).post(body).build();
//Call 将你的请求封装成任务Call call=client.newCall(request);
//请求调度
call.enqueue(new Callback() {  
  //失败   
 @Override    
public void onFailure(Call call, IOException e) {  
 
 }    
//成功   
 @Override   
 public void onResponse(Call call, Response response) throws IOException {  
         String  json= response.body().string();          
  }});
封装
新建一个类,然后写个单例,然后开始封装
String run(String url) throws IOException {    Request request=new Request.Builder().url(url).build();    Call call=client.newCall(request);    //通过call.execute()获得response;    Response response=call.execute();    return response.body().string();}
demo地址:https://github.com/wuwei12345/OKhttpDemo

0 0
原创粉丝点击