OkHttp基本使用方式

okhttp 简介

OkHttp Square 出品的 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值