我正在尝试通过Retrofit实现POST请求,但我认为这种方法似乎是错误的。我按照我用于GET请求的步骤进行了操作:
我定义了终点:
public interface GitHubEmailAPI {
@POST("/users/{user}")
Call<GitHubEmail> postEmail(@Field("email") String email);
}
模特:
public class GitHubEmail {
@SerializedName("email")
private String email;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
呼唤:
public void postEmail (){
GitHubEmailAPI apiService =
ApiClient.getClient().create(GitHubEmailAPI.class);
final Call<GitHubEmail> callEmail = apiService.postEmail
(String.valueOf(enterEmailEt.getText()));
callEmail.enqueue(new Callback<GitHubEmail>() {
@Override
public void onResponse(Call<GitHubEmail> call, Response<GitHubEmail> response) {
testTV.setText(callEmail.toString());
}
@Override
public void onFailure(Call<GitHubEmail> call, Throwable t) {
Log.e("Email", t.toString());
}
});
我使用github api作为测试,不确定访问令牌是否需要作为参数包含在请求中。
答案 0 :(得分:6)
有一些关于改造的信息....
- 结束
您的BASE_URL必须以/。
当您使用
@Field
表示法时,必须将@FormUrlEncoded
放入您的Api通话中。在API方法中使用{user}时,您必须使用
@Path("user") String user
与网址数据相关联。您的POST方法网址将如下
@POST("users/{user}")
。- 醇>
当您的回复回调完成此变量中
Response<GitHubEmail> response
内的实际数据时。您必须使用response.body()
来获得API CALL的响应。
以下是示例代码
@FormUrlEncoded
@POST("users/{user}")
Call<YourResultPojoClassHere> yourFuntionName(@Field("id") String id,@Path("user") String path);
请看下面的代码......
callEmail.enqueue(new Callback<GitHubEmail>() {
@Override
public void onResponse(Call<GitHubEmail> call, Response<GitHubEmail> response) {
if (response.isSuccessful()) {
if (response.body().getSuccess())
Toast.makeText(ClassName.this, response.body().getMessage(), Toast.LENGTH_SHORT).show();
else
Toast.makeText(ClassName.this, response.body().getMessage(), Toast.LENGTH_SHORT).show();
} else
Toast.makeText(ClassName.this, "Sorry for inconvince server is down", Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(Call<GitHubEmail> call, Throwable t) {
Toast.makeText(ClassName.this, "Check your Internet connection", Toast.LENGTH_SHORT).show();
}
}
});
答案 1 :(得分:5)
对于改装中的POST,您必须包含@FormUrlEncoded
@FormUrlEncoded
@POST("path_here")
Call<ResponseBody> function_name(@Field("data") String data);