我想实现通过改造一个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作为一个测试,如果访问令牌需要被包括在请求中的参数不能确定。
有一些信息,你知道的改造....
- 您BASE_URL必须用/来结束。
- 当您使用
@Field
符号,你必须在你的API调用把@FormUrlEncoded
。- 当你在API方法使用{}用户必须使用
@Path("user") String user
涉及到的URL数据。- 您的POST方法的URL会是这样
@POST("users/{user}")
。- 如果您的回应回调在这个变量做你
Response<GitHubEmail> response
内的实际数据。你必须使用response.body()
让你得到了什么,从API调用的响应。
下面是一个示例代码
@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();
}
}
});
对于POST在改造必须包括@FormUrlEncoded
@FormUrlEncoded
@POST("path_here")
Call<ResponseBody> function_name(@Field("data") String data);