Android网络请求库中,Retrofit是当下最热的一个网络请求库。
Retrofit 是一个 RESTful 的 HTTP 网络请求框架的封装。
原因:网络请求的工作本质上是 OkHttp 完成,而 Retrofit 仅负责 网络请求接口的封装。
使用步骤:
1.添加Retrofit库的依赖
compile'com.squareup.retrofit2:retrofit:2.0.2'
// Retrofit库
compile'com.squareup.okhttp3:okhttp:3.1.2'
// Okhttp库
compile'com.squareup.retrofit2:converter-gson:2.0.2'
//gson库
2.添加网络权限
<user-permission android:name="android.permission.INTERNET">
3.创建服务器返回数据的类
public class reception{
//根据json格式
}
4.创建用于描述网络请求的接口
Retrofit将 Http请求 抽象成 Java接口:采用 注解 描述网络请求参数 和配置网络请求参数 。
1.用 动态代理 动态 将该接口的注解“翻译”成一个 Http 请求,最后再执行 Http 请求
2.注:接口中的每个方法的参数都需要使用注解标注,否则会报错
public interface GetRequest_Interface {
@GET("openapi.do?keyfrom=Yanzhikai&key=2032414398&type=data&doctype=json&version=1.1&q=car")
Call<Translation> getCall();
}
// @GET注解的作用:采用Get方法发送网络请求
// getCall() = 接收网络请求数据的方法
// 其中返回类型为Call<*>,*是接收数据的类(即上面定义的Translation类)
// 如果想直接获得Responsebody中的内容,可以定义网络请求返回值为Call}
5.//创建Retrofit对象
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://fy.iciba.com/") // 设置 网络请求 Url .addConverterFactory(GsonConverterFactory.create()) //设置使用Gson解析(记得加入依赖) .build();
6.//创建 网络请求接口 的实例
GetRequest_Interface request = retrofit.create(GetRequest_Interface.class);
7.//对 发送请求 进行封装
Call call = request.getCall();
8.//步骤6:发送网络请求(异步)
call.enqueue(new Callback() {
//请求成功时回调 @Override
public void onResponse(Call call, Response response) {
// 步骤7:处理返回的数据结果
response.body().show();
}
//请求失败时回调 @Override
public void onFailure(Call call, Throwable throwable) {
System.out.println("连接失败");
}
});
此处特意说明URL的组成:Retrofit把 网络请求的URL 分成了两部分设置:
// 第1部分:在网络请求接口的注解设置@GET("openapi.do?keyfrom=Yanzhikai&key=2032414398&type=data&doctype=json&version=1.1&q=car")Call getCall();
// 第2部分:在创建Retrofit实例时通过.baseUrl()设置Retrofit retrofit =newRetrofit.Builder() .baseUrl("http://fanyi.youdao.com/")//设置网络请求的Url地址
.addConverterFactory(GsonConverterFactory.create())//设置数据解析器
.build();
// 从上面看出:一个请求的URL可以通过 替换块 和 请求方法的参数 来进行动态的URL更新。
// 替换块是由 被{}包裹起来的字符串构成
// 即:Retrofit支持动态改变网络请求根目录
网络请求的完整 Url =在创建Retrofit实例时通过.baseUrl()设置 +网络请求接口的注解设置(下面称 “path“ )
参考:http://blog.csdn.net/carson_ho/article/details/73732076
网友评论