【发布时间】:2019-07-01 15:40:53
【问题描述】:
我使用带有多个参数的retrofit2 发出POST 请求。调用成功,但response.body() 等于null。我用 Postman 用相同的参数检查了 URL,它工作正常,所以我真的不认为这是调用的问题,但我相信我用来接收 Callback 的方法不正确(错误代码我从response.code() 收到的是 500) 。任何帮助将不胜感激,谢谢。
POST接口:
public interface POSTApi {
String BASE_URL = "someURL/";
@POST("like")
Call<Resultlike> post(@Body Resultlike login);
}
拨打电话
private Retrofit retrofit = new Retrofit.Builder().baseUrl(POSTApi.BASE_URL)
.callbackExecutor(Executors.newSingleThreadExecutor())
.addConverterFactory(GsonConverterFactory.create())
.build();
POSTApi apiInterface = retrofit.create(POSTApi.class);
final Resultlike resultlike = new Resultlike("param1","param2","param3","param4");
Call<Resultlike> call = apiInterface.post(resultlike);
call.enqueue(new Callback<Resultlike>() {
@Override
public void onResponse(Call<Resultlike> call, Response<Resultlike> response) {
Resultlike logresponse = (Resultlike) response.body();
Log.e("TAG", String.valueOf(response.code()));
if(!response.isSuccessful()) {
Log.e("TAG", "NOT SUCCESSFUL");
}
Log.e("TAG", logresponse.getResult().getMessage());
Log.e("TAG", logresponse.getResult().getStatus());
}
@Override
public void onFailure(Call<Resultlike> call, Throwable t) {
Log.e("TAG", "FAILURE");
}
});
ResultLike 对象类:
public class Resultlike {
// These 4 are parameters that are passed in to make the POST request
@SerializedName("uid")
public String uid;
@SerializedName("contentId")
public String contentId;
@SerializedName("like")
public String like;
@SerializedName("timestamp")
public String timestamp;
// This is supposed to be receiving the callback of the data
@SerializedName("result")
public DataLike result;
public Resultlike(String uid, String contentId, String like, String timestamp) {
this.uid = uid;
this.contentId = contentId;
this.like = like;
this.timestamp = timestamp;
}
public DataLike getResult() { return result; }
public void setResult(DataLike setData) { result = setData; }
public String getUid() { return uid; }
public String getTimestamp() { return timestamp; }
public String getLike() { return like; }
public String getContentId() { return contentId; }
public void setUid(String uid) { this.uid = uid; }
public void setTimestamp(String timestamp) { this.timestamp = timestamp; }
public void setLike(String like) { this.like = like; }
public void setContentId(String contentId) { this.contentId = contentId; }
}
DataLike 对象类:
public class DataLike {
@SerializedName("status")
@Expose
private String status = "";
@SerializedName("message")
@Expose
private String message = "";
public String getMessage() { return message; }
public String getStatus() { return status; }
public void setMessage(String message) { this.message = message; }
public void setStatus(String status) { this.status = status; }
}
我期待回调的 JSON 数据:
{
"result": {
"status": "some string",
"message": "some string"
}
}
崩溃前的相关日志:
// 500 is the response code resulting from response.code()
E/TAG: 500
E/TAG: NOT SUCCESSFUL
【问题讨论】:
-
那你的服务器端可能有问题。
-
500 表示内部服务器错误。所以最好检查服务器端日志。
-
检查你的服务器,可能你的服务器端有问题。
-
body() 返回 null 因为您的内部服务器错误导致解析 json 返回值失败。
-
您是否尝试过通过
curl或与 Postman 进行相同的呼叫来验证这是一个 APP 问题?