Retrofit是Square公司推出的一个第三方框架,主要是针对其以前推出的网络请求库OkHttp的一个封装,这样我们只需要进行简单的配置Retorfit就可以进行网络请求了
在开发工具Android Student上使用Retrofit
导入的依赖:
compile
'com.squareup.retrofit2:retrofit:2.0.0-beta4'
//Retrofit2所需要的包
compile
'com.squareup.retrofit2:converter-gson:2.0.0-beta4'
//ConverterFactory的Gson依赖包
compile
'com.squareup.retrofit2:converter-scalars:2.0.0-beta4'
//ConverterFactory的String依赖包
在demo中所用的网络请求地址
请求地址:http://web.juhe.cn:8080/finance/stock/hs
请求参数:gid=sh601009&type=0&key=d28febfa1e2d21f37fd505f52e967b65
请求方式:GET
然后需要创建一个接口,通过注解与封装在Retrofit库内部的Okhhtp连接,进行网络请求
在方法上面有多种注解方式,现在只学到了两种
@GET: 通过get方式进行网络请求
@POST: 通过post方式进行网络请求
后面跟着的括号内的String就是整个网络请求的完整路径
Call<name>,其中的name就是进行网络请求后你需要返回的值的类型
更改为实体类,可以内部自动经过Gson解析,生成对应的实体类
更改为String,即返回请求的完整的json数据
然后在方法的参数中
@Query: 注解的功能相当于一个站位符
就是把 括号的String当做键值名,在之后的参数当做键值,形成一个键值对,当做参数拼接到上面的路径中,最后形成了完整的路径
例:
@GET(
"{name}"
)
Call<User>
getUser
(@Path(
"username"
)
String namevalue)
;
其这样直观的网络路径就是
name?username=namevalue
这样接口就写完了,现在可以去需要进行网络请求的地方调用Retrofit
首先生成一个Retrofit对象
Retrofit retrofit=new Retrofit.Builder()
.baseUrl("http://web,juhe,cn:8080/");
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build();
.baseUrl:括号中的参数加上之前@GET("name")中的name参数,形成最终的网络请求地址
.addConverterFactory:增加返回值为String的支持
.addConverterFactory: 增加返回值为实体类(已经经过了Gson的解析)的支持
生成刚才创建的接口对象
RequestService requestService = builder.create(RequestService.
class
);
调用接口中的方法,并添加参数
Call<Model> call1 = requestService.getModel(
"sh601009"
,
"0"
,
"d28febfa1e2d21f37fd505f52e967b65"
);
生成一个其内部的Call类对象,然后调用enqueue方法,异步获取网络数据
在先前已经定义好了一个Model类,对应网络的json数据,Retrofit库中也对Gson进行了封装,所以直接得到解析完成的数据