使用Retrofit发送POST参数

时间:2016-09-24 07:14:06

标签: android post retrofit

我正在尝试通过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作为测试,不确定访问令牌是否需要作为参数包含在请求中。

2 个答案:

答案 0 :(得分:6)

有一些关于改造的信息....

  
      
  1. 您的BASE_URL必须以/。

  2. 结束   
  3. 当您使用@Field表示法时,必须将@FormUrlEncoded放入您的Api通话中。

  4.   
  5. 在API方法中使用{user}时,您必须使用@Path("user") String user与网址数据相关联。

  6.   
  7. 您的POST方法网址将如下@POST("users/{user}")

  8.   
  9. 当您的回复回调完成此变量中Response<GitHubEmail> response内的实际数据时。您必须使用response.body()来获得API CALL的响应。

  10.   

以下是示例代码

@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);