发送POST参数与改造

问题描述 投票:2回答:2

我想实现通过改造一个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作为一个测试,如果访问令牌需要被包括在请求中的参数不能确定。

android post retrofit
2个回答
7
投票

有一些信息,你知道的改造....

  1. 您BASE_URL必须用/来结束。
  2. 当您使用@Field符号,你必须在你的API调用把@FormUrlEncoded
  3. 当你在API方法使用{}用户必须使用@Path("user") String user涉及到的URL数据。
  4. 您的POST方法的URL会是这样@POST("users/{user}")
  5. 如果您的回应回调在这个变量做你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();
            }
        }
    });

5
投票

对于POST在改造必须包括@FormUrlEncoded

@FormUrlEncoded
@POST("path_here")
Call<ResponseBody> function_name(@Field("data") String data);
© www.soinside.com 2019 - 2024. All rights reserved.