我正在使用postman扩展来发布请求。我想用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();
}
});
答案 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();
}
});