我需要用Retrofit执行POST请求,但我遇到了一个问题,我无法很好地理解。在尝试代码之前,我使用Postman测试了API调用,请求如下:
这是我的Android代码:
public class API {
private static <T> T builder(Class<T> endpoint) {
return new Retrofit.Builder()
.baseUrl(Utils.API_BASE_URL)
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(endpoint);
}
public static AllRequests request() {
return builder(AllRequests.class);
}
}
编辑 请求:
@POST("api/android-feedback")
@Headers({"Content-Type: application/x-www-form-urlencoded", "Authorization: F#@3FA@#Rad!@%!2s"})
Call<String> sendFeedback(@Body FeedbackBody body);
反馈正文:
public class FeedbackBody{
private final String email;
private final String feedback;
public FeedbackBody(String email, String feedback){
this.email = email;
this.feedback = feedback;
}
最后我构造了请求并等待响应,问题在于我在 onFail 方法中接收到消息。
private void sendFeedbackRequest(){
API.request().sendFeedback(new FeedbackBody("testmeil@meil.com", "test feedback").enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String> call, Response<String> response) {
goToMainActivity();
}
@Override
public void onFailure(Call<String> call, Throwable t) {
Toast.makeText(SplashScreenActivity.this, R.string.try_again_later, Toast.LENGTH_SHORT).show();
}
});
编辑: 还是不起作用..我想我找到了问题出在哪里,因为服务器端等待的是没有 Json 格式化的简单 POST 请求,我认为 Retrofit 默认使用 JSON 格式化,如果我发送 POST 请求并使用 JSON 格式化主体参数,服务器将无法解析我的请求,有没有机会像 POSTMAN 一样发送简单的 POST 请求而不使用 JSON 格式?
- Php api 等待这样的请求被发送:
$_POST['feedback'] = 'blabla'; $_POST['email'] = 'blabla..';
如果他收到 Json 格式的请求,无法解析它,因此我收到失败的响应。
sendFeedbackRequest(final String feedback, final String email)
更改为sendFeedbackRequest(FeedbackBody body)
。 - SajithsendFeedbackRequest()
函数和我的答复。 - Sajith