首页 > 解决方案 > 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());
            }
        });

帮我看看我应该怎么做才能解决这个问题?

标签: androidjsonretrofitretrofit2

解决方案


好吧,从它的外观来看,问题不在于代码。您收到的响应不是成功消息,而是 402 错误代码,其中显示“需要付款”的消息。

根据您使用的 API的官方文档,原因是这样的

帐户因未付款而拖欠,或者必须确认帐户的付款方式才能继续

检查下面的图像以供参考。

返回状态码的官方文档.

所以基本上它的服务器会返回一个错误代码。并且您的 response.isSuccessful 最终将是错误的,除非您收到成功消息作为响应,即图像中显示的状态之一。


推荐阅读

  • firebase - 如何从firestore中删除每个集合
  • r - 同质化作为单独参数传递给 R 函数的向量、列表和值
  • python - 如何列出代入 AWS IAM 角色的可用策略
  • c# - 检测陀螺仪相机的初始方向,但仅检测航向
  • java - 文件的每个字节都是由字符集中的字符组成的吗?
  • javascript - 如何编写像operand(operator(operand))这样的JS函数?
  • python - iNotify 收到事件后如何关闭文件句柄
  • python-3.x - 将变量从一个函数调用到另一个函数的问题
  • php - 通过函数创建数组