Retrofit使用步骤
步骤1:添加库和网络权限
compile 'com.squareup.retrofit2:retrofit:2.2.0'
compile 'com.squareup.retrofit2:converter-gson:2.2.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.2.0'
<uses-permission android:name="android.permission.INTERNET"/>
步骤2:创建接收服务器返回数据的类
public class Reception{
//根据返回数据的格式和数据解析方式定义
}
步骤3:创建用于描述网络请求的接口
Retrofit将Http请求抽象成Java接口:采用 注解 描述网络请求参数和配置网络请求参数
接口中的每个方法的参数都需要使用注解,否则会报错
public interface GetRequest_Interface{
@GET() //采用get方法发送网络请求
Call<Translation> getCall();
//getCall()是接收网络请求数据的方法
//返回类型为Call<*>,*是接收数据的类
//如果想直接获得Responsebody,可定义为Call<ResponseBody>
}
注解类型(有三类)
- 第一类:网络请求方法(Get和Post):Retrofit把网络请求的URL分成了两部分设置
第一部分:网络请求接口的注解设置 @GET(test.html?username=123)
第二部分:创建Retrofit实例时通过 .baseUrl() 设置
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://www.baidu.com/") //设置网络请求的url地址
.addConverterFactory(GsonConverFactory.create())
.build();
网络请求完整的Url = .baseUrl() + 网络请求接口的注解设置(也叫path)
整合规则:path = 相对路径,baseUrl = 目录形式
比如:Url = “http://www.baidu.com/test.html?username=123”
那么 path = “test.html?username=123”,baseUrl = “http://www.baidu.com/”
- 第二类:标记
@Streaming(表示返回的数据以流的形式返回)
@FormUrlEncoded 每个键值对需要用@Filed来注解键名,随后的对象需要提供值
@Multipart 需要用@Part来注解键名
例子:
@POST("/form")
@FormUrlEncoded
Call<ResponseBody> testForm(@Field("username") String name, @Field("age") int age);
@POST("/form")
@Multipart
Call<ResponseBody> testFileUpload(@Part("name") RequestBody name, @Part("age") RequestBody age, @Part MultipartBody.Part file);
Multipart有三种类型 {@Part RequestBody}、{@Part MultipartBody.Part}、任意类型 (除了第二种之外,其他都必须带上表单字段)
- 第三类:网络请求参数
重点是 @Query 和 @QueryMap
作用:用于@GET方法的查询参数(就是Url中“?”后面的键值对)
如:url = http://www.baidu.com/test.html?username=123 (其中 Query = username)
@GET()
Call test(@Query(“username”) String name)
步骤4:创建Retrofit实例
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://www.baidu.com/") //设置网络请求的url地址
.addConverterFactory(GsonConverFactory.create()) //设置解析器
.addCallAdapterFactory(RxJavaCallAdapterFactory.create()) //支持RxJava
.build();
步骤5:创建网络请求接口实例
// 创建 网络请求接口 的实例
GetRequest_Interface request = retrofit.create(GetRequest_Interface.class);
//对 发送请求 进行封装
Call<Reception> call = request.getCall();
步骤6:发送网络请求(异步/同步)
异步
call.enqueue(new Callback<Translation>() {
//请求成功时回调
@Override
public void onResponse(Call<Translation> call, Response<Translation> response) {
//请求处理,输出结果
response.body().show();
}
//请求失败时候的回调
@Override
public void onFailure(Call<Translation> call, Throwable throwable) {
System.out.println("连接失败");
}
});
同步
Response<Reception> response = call.execute();
步骤7:处理返回数据
response.body()