Retrofit
是一个简化Android网络请求的一个开源工具,本文主要记录Retrofit
的基本用法,想要了解更多可以转到Retrofit的官方网站.
依赖配置
要想在项目中使用Retrofit
,我们可以通过以下的方式将Retrofit
添加到项目中:
Maven
1 | <dependency> |
Gradle
1 | compile 'com.squareup.retrofit2:retrofit:2.1.0' |
第二句是为了使用Gson进行数据格式的转换.Retrofit
需要运行于 Java7 , Android2.3 以上的版本
基本使用
我们使用豆瓣电影的Top250做为实例,URL为:
返回是JSON格式的字符串,由于返回的结果太长在这就不贴出来了.
若我们要使用Retrofit
对上面的URL进行访问,首先我们要创建一个对返回结果的封装的Entity.我们将其命名为MovieEntity
,他对应于返回数据中的下面的一段数据.1
2
3
4
5
6
7{
"title": "肖申克的救赎",
"genres": [
"犯罪",
"剧情"
],
}
为简单这里我只保留标题和类型.而我们设计的MovieEntity
如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23public class MovieEntity {
String title;
ArrayList<String> genres;//可使用列表,数据等存放
/**
* 用于验证返回结果
*/
public String toString() {
return title + genres.get(0);
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public ArrayList<String> getGenres() {
return genres;
}
public void setGenres(ArrayList<String> genres) {
this.genres = genres;
}
}
Entity的变量名需要和Json数据的名字相同或者采用@SerializedName()
注解进行指定对应关系.
由于返回的JSON数据并不只是电影对象,所以还需一个封装返回结果的对象,我们将他命名为HttpResult
,其中我们只存放电影的数据,其他数据并不存放:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16public class HttpResult {
ArrayList<MovieEntity> subjects;
public ArrayList<MovieEntity> getSubjects() {
return subjects;
}
public void setSubjects(ArrayList<MovieEntity> subjects) {
this.subjects = subjects;
}
}
```
有了基本的对象后,我们可以创建请求服务的接口`MovieService`:
```java
public interface MovieService {
"top250") (
Call<HttpResult> getTopMovie(@Query("start") int start,@Query("count") int count);
}
其中参数start
和count
为URL中对应的请求参数,@GET("top250")
说明了采用GET方法进行网络请求.我们创建了服务接口后就可以进行网络请求了,在MainActivity中我们编写getMovie()
方法进行网络请求:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20public void getMovie(){
//基础的URL,与服务接口的参数组成完整的URL
String baseURL="https://api.douban.com/v2/movie/";
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(baseURL)
.addConverterFactory(GsonConverterFactory.create())
.build();
MovieService service=retrofit.create(MovieService.class);
Call<HttpResult> call=service.getTopMovie(0,10);
call.enqueue(new Callback<HttpResult>() {
public void onResponse(Call<HttpResult> call, Response<HttpResult> response) {
Log.e("RESULT",response.body().getSubjects().get(0).toString());
}
public void onFailure(Call<HttpResult> call, Throwable t) {
Log.e("falut",t.getMessage());
}
});
}
通过在onCreate()
方法中简单的调用getMovie()
后我们可以在Log中看到下面的信息:1
07-27 16:31:41.605 20945-20945/com.source.kevin.retrofitsample E/RESULT: 肖申克的救赎犯罪
这就证明了Retrofit
已经在我们的项目中正常的运行了.