android - Response.isSuccessfull() 为假
问题描述
帮帮我。我正在为我的项目使用改造,我对它完全陌生。我收到以下错误。为什么我收到错误的回复?
2020-02-20 15:35:26.230 22602-22602/q.goaldiggers.auth_api_testing
D/Ayush: Response
2020-02-20 15:35:26.230 22602-22602/q.goaldiggers.auth_api_testing
D/Ayush:
Response{protocol=http/1.1, code=402, message=Payment Required,
url=https://quizziyapa.herokuapp.com/getTopics}
2020-02-20 15:35:26.230 22602-22602/q.goaldiggers.auth_api_testing
D/Ayush: Payment Required
2020-02-20 15:35:26.230 22602-22602/q.goaldiggers.auth_api_testing
D/Ayush: okhttp3.ResponseBody$1@647c751
2020-02-20 15:35:26.230 22602-22602/q.goaldiggers.auth_api_testing
D/Ayush: null
2020-02-20 15:35:26.230 22602-22602/q.goaldiggers.auth_api_testing
D/Ayush: false
2020-02-20 15:35:26.230 22602-22602/q.goaldiggers.auth_api_testing
D/Ayush: retrofit2.OkHttpCall$NoContentResponseBody@4f0bbb6
[Error][1]
JSON结构
这是我的 json 结构。
{
"topics": [
{
"_id": 2,
"topic": "abc",
"imageUrl": "abc12345"
},
{
"_id": 3,
"topic": "abc",
"imageUrl": "abc12345"
}
]
}
主题.java
我的模型课
public class Topic {
int _id;
String topic;
String imageUrl;
public Topic(int _id, String topic, String imageUrl) {
this._id = _id;
this.topic = topic;
this.imageUrl = imageUrl;
}
public int getId() {
return _id;
}
public String getTopic() {
return topic;
}
public String getImageUrl() {
return imageUrl;
}
}
主题响应.java
JSON 响应类
public class TopicResponse {
@SerializedName("topics")
Topic[] topics;
public TopicResponse(Topic[] topics) {
this.topics = topics;
}
public Topic[] getTopics() {
return topics;
}
}
IUserApi.java(API 接口)
public interface IUserApi {
@GET("getTopics")
Call<TopicResponse> getTop();
}
MainActivity.java
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://quizziyapa.herokuapp.com/")
.addConverterFactory(GsonConverterFactory.create())
.build();
IUserApi api = retrofit.create(IUserApi.class);
Call<TopicResponse> call= api.getTop();
call.enqueue(new Callback<TopicResponse>() {
@Override
public void onResponse(Call<TopicResponse> call, Response<TopicResponse> response) {
Log.d("Ayush", "Response");
Log.d("Ayush", String.valueOf(response));
Log.d("Ayush", String.valueOf(response.message()));
Log.d("Ayush", String.valueOf(response.errorBody()));
Log.d("Ayush", String.valueOf(response.body()));
Log.d("Ayush", String.valueOf(response.isSuccessful()));
Log.d("Ayush", String.valueOf(response.raw().body()));
}
@Override
public void onFailure(Call<TopicResponse> call, Throwable t) {
Log.d("Ayush", "Failed \n"+t.getMessage());
}
});
帮我看看我应该怎么做才能解决这个问题?
解决方案
好吧,从它的外观来看,问题不在于代码。您收到的响应不是成功消息,而是 402 错误代码,其中显示“需要付款”的消息。
根据您使用的 API的官方文档,原因是这样的
帐户因未付款而拖欠,或者必须确认帐户的付款方式才能继续
检查下面的图像以供参考。
所以基本上它的服务器会返回一个错误代码。并且您的 response.isSuccessful 最终将是错误的,除非您收到成功消息作为响应,即图像中显示的状态之一。