【问题标题】:Retrofit 2.0: Unable to create call adapter for classRetrofit 2.0:无法为类创建调用适配器
【发布时间】:2015-10-20 15:26:30
【问题描述】:

我正在使用 Retrofit 2.0-beta1。如何进行简单的同步请求并将 JSON 响应反序列化为 POJO 列表?这是我的界面:

public interface ArticlesAPI {
    @GET("/articles")
    List<ArticleResource> getArticles();
}

public class ArticleResource {

    public String id;
    public String name;

    public Article toArticle() {
        return new Article(id, name);
    }
}

但我收到此错误:

>  Unable to create call adapter for
> java.util.List<com.bla.bla.rest.resources.ArticleResource>

改造构建

Retrofit retrofit = (new Retrofit.Builder()).baseUrl(this.baseUrl).build();
ArticlesAPI api = retrofit.create(ArticlesAPI.class);

【问题讨论】:

  • 你是如何实例化 Retrofit.Builder 的?
  • 我已经发布了代码
  • 还是不行
  • 是同一个错误吗?
  • 是的,同一个。虽然我已经使用 JacksonConverterFactory 代替。它应该有效,不是吗?

标签: android json retrofit


【解决方案1】:

如果您使用kotlin coroutines 并且该函数不是suspend 函数,也会出现此问题

public interface ArticlesAPI {
 @GET("url.../habits/progress/")
    suspend fun getHabitsTasks(): BaseResponse<HabitResModel>
}

【讨论】:

  • 嘉周!我忘记了挂起前缀。谢谢! :)
  • Ops..为什么是安卓?为什么?
  • 你好@Rahul,我是 MVVM 和 corotuine 的新手,我遇到了同样的问题。你能帮帮我吗。这是我的代码 github.com/diptoroy/RetrofitKotlin
【解决方案2】:

根据您发布的代码,您必须更改

List&lt;ArticleResource&gt; getArticles();

Call&lt;List&lt;ArticleResource&gt;&gt; getArticles();

您可能还想显式调用addConverterFactory 来设置您要使用的转换器

【讨论】:

  • 你能解释一下为什么会这样吗?
  • @Radu 为什么是什么?
  • 为什么 Retrofit 2.0 决定将所有内容都封装在一个 Call 中。我认为是封装同步/异步行为?
  • @Radu,很有可能。您应该要求 Square 100% 确定
【解决方案3】:

在 build.gradle 文件中将 retrofit2 版本更改为最新版本

implementation "com.squareup.retrofit2:retrofit:2.9.0"

【讨论】:

    猜你喜欢
    • 2019-10-21
    • 1970-01-01
    • 2021-06-26
    • 2017-09-12
    • 2021-08-17
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多