Retrofit2学习之三:GET请求

简介

Retrofit2 GET请求的请求参数支持Query、RESTful Path、Map及其任意组合形式。

官方文档:http://square.github.io/retrofit/

GET请求

创建业务请求接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public interface Api {

/**
* Query参数
* @param user_id
* @return
*/
@GET("user/info")
Call<User> getUserInfoWithQuery(@Query("id") int user_id);

/**
* Path参数
* @param user_id
* @return
*/
@GET("user/{id}")
Call<User> getUserInfoWithPath(@Path("id") int user_id);

/**
* Map参数
* @param params
* @return
*/
@GET("user/info")
Call<User> getUserInfoWithMap(@QueryMap() Map<String, String> params);

}

创建一个Retrofit的实例,然后利用Retrofit实例创建接口对象和调用接口方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public void getRequest(View view) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(SERVER_ADDRESS)
.addConverterFactory(GsonConverterFactory.create())
.build();

api = retrofit.create(Api.class);

Map<String, String> map = new HashMap<>();
map.put("id", "8");
map.put("name", "AndroidiOS.cc");

//api.getUserInfoWithQuery(8).enqueue(new Callback<User>() {
//api.getUserInfoWithPath(8).enqueue(new Callback<User>() {
api.getUserInfoWithMap(map).enqueue(new Callback<User>() {
@Override
public void onResponse(Call<User> call, Response<User> response) {
//在UI主线程运行
if (response.isSuccessful()) {
Log.i(TAG, "返回成功");
User user = response.body();
if (user != null) {
Toast.makeText(MainActivity.this, "User Id: " + user.getId(), Toast.LENGTH_SHORT).show();
}
}
}

@Override
public void onFailure(Call<User> call, Throwable t) {
Log.i(TAG, "请求失败: " + t.getLocalizedMessage());
}
});
}

依次调用 getUserInfoWithQuerygetUserInfoWithPathgetUserInfoWithMap,服务端接收的的请求头如下,可见Map参数只是Query参数的拼接组合。

1
2
3
"GET /user/info?id=8 HTTP/1.1" 200 -
"GET /user/8 HTTP/1.1" 200 -
"GET /user/info?name=AppBlog.CN&id=8 HTTP/1.1" 200 -

Powered by AppBlog.CN     浙ICP备14037229号

Copyright © 2012 - 2020 APP开发技术博客 All Rights Reserved.

访客数 : | 访问量 :