【问题标题】:How to use retrofit without any pojo or data class or model class如何在没有任何 pojo 或数据类或模型类的情况下使用改造
【发布时间】:2020-10-14 13:32:37
【问题描述】:

我正在开发一个我想使用改造的应用程序,但是来自 API 的响应非常大,不能在任何数据类或 POJO 类中转换,而且响应是动态的,它随着用户备份操作的增加而增加,所以我想问很长时间,有什么方法可以在不制作响应数据类或 POJO 类的情况下使用改造,否则我必须回到使用 REST api 的基本 Http 方式。

如果有人已经实现或使用过,请提供一些想法如何实现这一点,将是一个很大的帮助。提前致谢。

【问题讨论】:

  • 您可以尝试使用 Call call=apiInterface.your_api_request_method("")。然后调用.enque
  • 不适用于 JsonObject
  • 你的问题对我来说没有多大意义。在没有对象结构的情况下获取数据的目的是什么?您想将其显示为文本吗?对于未解析的对象数据,我无法想象任何有用的东西。

标签: java android kotlin retrofit retrofit2


【解决方案1】:

来自改造文档:

[1] Retrofit 是您的 API 接口转换为可调用对象的类。

[2] Retrofit 将您的 HTTP API 转换为 Java 接口。

Retrofit 的唯一目的是将您的 API 调用抽象为 Java 接口。 IT 旨在与接口和 POJO 一起使用,它就是这样设计的。如果你不想使用 POJO,你可以使用 OkHttp,它实际上是 Retrofit 在后台使用的。仅当您需要将 HTTP 调用抽象为 Java 对象时,才应使用 Retrofit。

【讨论】:

    【解决方案2】:

    您总是可以通过@Body 注解发送字符串。

    public interface YourService{
        @POST("some/extension")
        Call<Object> makeCall(@Body String body);
    }
    

    您可以像这样访问响应的正文:

    service.makeCall(yourCustomString).enqueue(new Callback<String>() {
        @Override
        public void onResponse(Response<String> response) {
            String content = response.body(); // this gives the response body as a string
        }
    
        @Override
        public void onFailure(Throwable t) {...}
    });
    

    我仍然认为使用 JSON-Converters 是可行的方法。根据 JSON 结构,您可能只需要包装响应/请求类中的许多嵌套类。大小不同并不重要,可以使用列表和可选属性轻松创建。你的反应有多大?例如,Moshi 并没有真正的大小限制。

    【讨论】:

    • 在这里使用改造在我看来是一种矫枉过正。 Retrofit 实际上使用 okHttp 作为依赖项,并且改造的唯一目的是将请求抽象为 Java 接口。如果目标只是传输文本数据,我宁愿使用 OkHttp 并保存一个依赖项。
    猜你喜欢
    • 1970-01-01
    • 2015-05-12
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 1970-01-01
    相关资源
    最近更新 更多