【问题标题】:Retrofit post request with parameters使用参数改造 post 请求
【发布时间】:2016-01-28 14:49:55
【问题描述】:

我正在使用邮递员扩展来发送请求。我想用 android 提出同样的要求。我使用改造库来访问我的目标。但我无法获得成功的结果。我的代码错误在哪里?

邮递员:

我的界面:

public interface Interfacem {

    @FormUrlEncoded
    @POST("/login")
    Call<ResponseBody> getResponse(@Field("signin[username]") String username,@Field("signin[password]")String password );
}

和改造使用:

Retrofit retrofit = new Retrofit.Builder()
                        .baseUrl("http://myurl.com")
                        .build();

                Interfacem service = retrofit.create(Interfacem.class);
                Call<ResponseBody> result =service.getResponse("myUsername","myPassword");
                result.enqueue(new Callback<ResponseBody>() {
                    @Override
                    public void onResponse(Response<ResponseBody> response) {
                        try {
                            System.out.println(response.body().string().toString());
                        } catch (IOException|NullPointerException e) {
                            e.printStackTrace();
                        }

                    }

                    @Override
                    public void onFailure(Throwable t) {
                        t.printStackTrace();
                    }
                });

【问题讨论】:

    标签: android retrofit


    【解决方案1】:

    试试这个 提供正文

    public class SignBody {
      @SerializedName("signin[username]") @Expose private String username;
      @SerializedName("signin[password]") @Expose private String password;
    }
    

    界面改为

    @POST("/login")
        Call<ResponseBody> getResponse(@Body SignBody body);
    

    【讨论】:

    • 我收到这条消息:“必填字段不能为空”
    【解决方案2】:

    如果您使用的是Retrofit 2.x,请尝试更改您的改造对象的构建,如下所示:

    Retrofit retrofit = new Retrofit.Builder()
                            .baseUrl("http://myurl.com/")
                            .build();
    

    也许下面的事情会有所帮助

    前导 / 在部分 url 中覆盖 API 端点定义的结尾。从部分 url 中删除 / 并将其添加到基本 url 将带来预期的结果。

    例子:

    API 接口

        public interface UserService {  
        @POST("/me")
        Call<User> me();}
    

    使用baseUrl 构建Retrofit

        Retrofit retrofit = Retrofit.Builder()  
        .baseUrl("https://your.api.url/v2");
        .build();
    

    然后调用:

    UserService service = retrofit.create(UserService.class);
    

    -->请求Url将是https://your.api.url/me/v2已经消失)

    专业提示

    为您的部分端点网址使用相对网址并结束您的 带有斜杠/的基本网址。

    界面

    public interface UserService {  
        @POST("me")
        Call<User>me();
    }
    

    使用 baseURL 进行改造

    Retrofit retrofit = Retrofit.Builder()  
        .baseUrl("https://your.api.url/v2/");
        .build();
    

    致电

    UserService service = retrofit.create(UserService.class);
    

    --> 请求 URL 将是 https://your.api.url/v2/me

    【讨论】:

      【解决方案3】:

      您在改造中使用哪个版本?下面是 2.0 版的代码。如果任何标题需要,请检查。如果您可以共享 url 和用户名或密码。我会检查的。

      public interface Interfacem {
      
          @FormUrlEncoded
          @POST("login")
          Call<ResponseBody> getResponse(@Field("username") String username,@Field("password")String password );
      }
      
      
      Retrofit retrofit = new Retrofit.Builder()
                              .baseUrl("http://myurl.com/")
                              .build();
      
                      Interfacem service = retrofit.create(Interfacem.class);
                      Call<ResponseBody> result =service.getResponse("myUsername","myPassword");
                      result.enqueue(new Callback<ResponseBody>() {
                          @Override
                          public void onResponse(Response<ResponseBody> response) {
                              try {
                                  System.out.println(response.body().string().toString());
                              } catch (IOException|NullPointerException e) {
                                  e.printStackTrace();
                              }
      
                          }
      
                          @Override
                          public void onFailure(Throwable t) {
                              t.printStackTrace();
                          }
                      });
      

      【讨论】:

      • 什么是响应体?这是自定义类还是改造类?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-30
      • 1970-01-01
      • 2020-06-14
      • 1970-01-01
      • 2019-04-27
      • 2015-05-09
      • 2015-05-14
      相关资源
      最近更新 更多