首先导入依赖
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.retrofit2:converter-gson:2.3.0'
compile 'io.reactivex.rxjava2:rxjava:2.1.3'
compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0-RC3'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
Retrofit是Square开发的一个Android和Java的REST客户端库。这个库非常简单并且具有很多特性,相比其他的网络库,更容易让初学者快速掌握。它可以处理GET、POST、PUT、DELETE…等请求,还可以使用picasso加载图片。
Retrofit 2.0底层依赖OkHttp实现,也就是说Retrofit本质上就是对OkHttp的更进一步封装。Retrofit和其它Http库最大区别在于通过大范围使用注解简化Http请求。
请求方法注解
该类型的注解用于标注不同的http请求方式,主要有以下几种:
注解 说明
@GET 表明这是get请求
@POST 表明这是post请求
@PUT 表明这是put请求
@DELETE 表明这是delete请求
@PATCH 表明这是一个patch请求,该请求是对put请求的补充,用于更新局部资源
@HEAD 表明这是一个head请求
@OPTIONS 表明这是一个option请求
@HTTP 通用注解,可以替换以上所有的注解,其拥有三个属性:method,path,hasBody
请求和响应格式注解
该类型的注解用于标注请求和响应的格式。
名称 说明
@FormUrlEncoded 表示请求发送编码表单数据,每个键值对需要使用@Field注解
@Multipart 表示请求发送multipart数据,需要配合使用@Part
@Streaming 表示响应用字节流的形式返回.如果没使用该注解,默认会把数据全部载入到内存中.该注解在在下载大文件的特别有用
请求参数类注解
该类型的注解用来标注请求参数的格式,有些需要结合上面请求和响应格式的注解一起使用。
名称 说明
@Body 多用于post请求发送非表单数据,比如想要以post方式传递json格式数据
@Filed 多用于post请求中表单字段,Filed和FieldMap需要FormUrlEncoded结合使用
@FiledMap 和@Filed作用一致,用于不确定表单参数
@Part 用于表单字段,Part和PartMap与Multipart注解结合使用,适合文件上传的情况
@PartMap 用于表单字段,默认接受的类型是Map
retrofit也分为同步请求和异步请求
execute()同步
enquere()异步
1、同步是指两个线程的运行是相关的,其中一个线程要阻塞等待另外一个线程的运行。可能造成程序未响应
2、异步的意思是两个线程毫无相关,自己运行自己的。所以使用异步任务
Post请求支持文件上传
Retrofit+RxJava(在Retrofit使用基础之上):
1. 把Retrofit接口的Call对象换成Observable被观察;
2. 在Retrofit.Buidle的对象调用addCallAdapterFactory()方法进行创建RxJava适配工厂;
3. 通过Retrofit接口调用里面方法的对象通过subscribeOn()方法订阅到新的线程
通过observeOn()方法在主线程中放置观察着
最后通过subscribe()方法和Observer()方法进行关联通过onNext来获取被观察者的数据,