Retrofit2学习之四:POST请求

简介

Retrofit2 POST请求的请求参数支持Body、FormUrlEncoded、Multipart形式。

  • Body:Converter转换器支持的格式(如JSON)
  • FormUrlEncoded:Form表单形式
  • Multipart:支持文件提交

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

POST请求

创建业务请求接口

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

/**
* Body参数
* @param user
* @return
*/
@POST("user/new")
Call<ResponseResult> saveUser(@Body User user);

/**
* 表单参数
* @param userId
* @param userName
* @return
*/
@FormUrlEncoded
@POST("user/edit")
Call<ResponseResult> editUser(@Field("id") int userId, @Field("username") String userName);

}

创建一个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
public void postRequest(View view) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(SERVER_ADDRESS)
.addConverterFactory(GsonConverterFactory.create())
.build();

api = retrofit.create(Api.class);

User user = new User();
user.setId(8);
user.setUsername("AppBlog.CN");

//api.saveUser(user).enqueue(new Callback<ResponseResult>() {
api.editUser(8, "AppBlog.CN").enqueue(new Callback<ResponseResult>() {
@Override
public void onResponse(Call<ResponseResult> call, Response<ResponseResult> response) {
//在UI主线程运行
if (response.isSuccessful()) {
Log.i(TAG, "返回成功");
ResponseResult result = response.body();
if (result != null) {
Toast.makeText(MainActivity.this, result.getMessage(), Toast.LENGTH_SHORT).show();
}
}
}

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

依次调用 saveUsereditUser ,以 Body 和 Field 参数的形式发送 POST 请求,服务端接收的格式分别为JSON(通过GsonConverterFactory转换Body)和表单参数。

1
2
3
4
5
6
"POST /user/new HTTP/1.1" 200 -
{u'username': u'AppBlog.CN', u'id': 8}

"POST /user/edit HTTP/1.1" 200 -
id = 8
username = AppBlog.CN

Powered by AppBlog.CN     浙ICP备14037229号

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

访客数 : | 访问量 :