Retrofit 2.0:无法为类创建调用适配器

10

我正在使用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 retrofit = (new Retrofit.Builder()).baseUrl(this.baseUrl).build();
ArticlesAPI api = retrofit.create(ArticlesAPI.class);

你是如何实例化 Retrofit.Builder 的? - Blackbelt
我已经发布了代码。 - Héctor
它仍然不起作用。 - Héctor
这是相同的错误吗? - Blackbelt
是的,同一个。虽然我使用了JacksonConverterFactory。它应该可以工作,对吧? - Héctor
可以了!谢谢。你能把它发布为答案吗?我会接受它。 - Héctor
3个回答

35

如果您正在使用 kotlincoroutines,并且函数不是 suspend 函数,则还会出现此问题。

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

4
咔嚓!我忘记了挂起前缀。谢谢! :) 翻译:Ka-chow!我忘记添加暂停前缀。谢谢! :) - gbruscatto
哎呀,为什么是安卓?为什么? - Ritzor
你好@Rahul,我刚接触MVVM和协程,遇到了同样的问题。你能帮我吗?这是我的代码https://github.com/diptoroy/RetrofitKotlin - user10997009
挽救了局面... - Nouman Ghaffar

7
根据您发布的代码,您需要从
List getArticles();
更改为
Call > getArticles();
您可能还想明确调用addConverterFactory以设置要使用的转换器。

你能否解释一下为什么这样? - Radu
@Radu 为什么那样是什么? - Blackbelt
为什么Retrofit 2.0决定将所有内容都包装在Call<T>中?我认为这是为了封装同步/异步行为。 - Radu
1
@Radu,这是十分有可能的。你应该问方块以确保100%确定。 - Blackbelt

2

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接