使用参数

时间:2016-01-27 11:37:40

标签: android retrofit

我正在使用postman扩展来发布请求。我想用android做同样的请求。我使用改造库来访问我的目标。但我无法获得成功的结果。我在代码中的错误在哪里?

邮递员: enter image description here

我的界面:

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();
                    }
                });

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

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

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

也许下面的内容会有所帮助

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

示例:

API接口

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

使用Retrofit

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

然后致电:

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

- &gt; 请求网址为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);

- &gt; 请求网址为https://your.api.url/v2/me

答案 2 :(得分:0)

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

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();
                    }
                });