(改造)找不到类崩溃应用程序的转换器

Posted

技术标签:

【中文标题】(改造)找不到类崩溃应用程序的转换器【英文标题】:(Retrofit) Could not locate converter for class crashing app 【发布时间】:2015-11-27 08:57:21 【问题描述】:

Retrofit 2.0.0 最近发布了,实际上并没有任何关于如何使用它的更新示例,但我试图为基本的 API 调用实现它。我得到一个

java.lang.IllegalArgumentException: Unable to create converter for class` 

引起
Caused by: java.lang.IllegalArgumentException: Could not locate converter for class orbyt.app.dataclass. Tried:
* retrofit.OkHttpBodyConverterFactory

尝试进行 api 调用时。

【问题讨论】:

不知道Retrofit,我猜有一个注释可以在某处指定转换器。 @JiangYD 不明白你的意思 您需要发布更多关于此错误的代码。发布您的 api 调用。 square.github.io/retrofit 上的示例会引发此错误。如果您不相信提出问题的人,或者您想了解详细信息,请尝试一下。他们不想做任何花哨的事情。 【参考方案1】:

我也面临同样的问题。我通过添加来修复它:

compile 'com.squareup.retrofit2:converter-gson:<latest-version>'

到我的 build.gradle

然后在创建我的 Retrofit 实例时指定转换器。

Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(Constants.API_BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

【讨论】:

所以我昨晚修复了这个问题,基本上将these 2个类复制到我的项目中并调用.addConverterFactory(GsonConverterFactory.create())。通过 gradle 链接转换器显然是一种更简洁的选择,因此将其标记为答案。 还要确保converter-gson 的版本与retrofit 本身的版本相匹配 - 请参阅***.com/questions/32902157/… 这个答案已经过时了,Gradle 甚至不会与这个版本同步,更不用说编译了。你需要编译'com.squareup.retrofit2:converter-gson:2.0.2'【参考方案2】:

在 Retrofit 2.0 中,Converter 不包含在包中,并且 当您使用 Retrofit 2.0 时,请确保遵循新的 URL 模式

基本网址:始终以 /

结尾

@Url:不要以 /

开头
Retrofit retrofit = new Retrofit.Builder()
        .baseUrl(Constants.API_BASE_URL)
        .addConverterFactory(GsonConverterFactory.create())
        .build();

有关 2.0 的更多信息,请点击此链接Retrofit 2.0: The biggest update

同时更新 build.gradle。

implementation "com.squareup.retrofit2:converter-gson:$retrofit_version"

并在项目级 build.gradle 文件中添加扩展

ext 
retrofit_version= "2.x.x"

【讨论】:

此答案不包括相关的 Gradle 依赖项。 @Ak 我提到了他们提到的所有这些事情的最佳最大更新链接。需要在当前版本的基础上更新 API【参考方案3】:

相应地更改改造版本

对我来说,下面的依赖已经存在了

compile 'com.squareup.retrofit2:retrofit:2.0.2'

对于 gson 2.0.2 我改变了

compile 'com.squareup.retrofit2:converter-gson:2.0.2'

然后添加

Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(Constants.API_BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

【讨论】:

这个答案是最新的,它应该比过时的答案多,甚至比不包含相关依赖的答案多。【参考方案4】:

对于 Retrofit V2,添加以下存储库 -

compile 'com.squareup.retrofit2:retrofit:2.0.0'
compile 'com.google.code.gson:gson:2.6.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.0'

现在使用下面的代码 -

Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(API_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

希望它会有所帮助:)

【讨论】:

【参考方案5】:

在最新的Retrofit 2.0中,你应该导入最新的版本:

compile 'com.squareup.retrofit2:retrofit:2.0.0'
compile 'com.squareup.retrofit2:converter-gson:2.0.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0'

小心调用baseUrl(),在v2.0,它应该是“/”的结尾,而在方法中,你不会以“/”开头的url

@POST("classes/info")
Call<ContactBean> insertInfo(@Body ContactBean bean);

您可以查看Retrofit 以获取更多信息! 希望有所帮助!

【讨论】:

【参考方案6】:

在my case(带有协程的Kotlin)中我收到了异常:

无法为 retrofit2.Call 创建转换器

用于方法 Queries.exportPdf。

原因: java.lang.IllegalArgumentException:找不到 ResponseBody retrofit2.Call 转换器

请求中有问题:

@FormUrlEncoded
@Streaming
@POST("export-pdf/")
suspend fun exportPdf(
    @Field("token") token: String
): Call<ResponseBody>

从定义中删除了suspend,异常消失了。

【讨论】:

以上是关于(改造)找不到类崩溃应用程序的转换器的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 在启动时崩溃:在路径 DexPathList 上找不到类 .MainActivity

Java - 将xml转换为JAVA Pojo类,包括java注释(Simplexml)

在路径上找不到类:dexpathlist

找不到值时 Android 应用程序崩溃

应用程序崩溃可能是布局错误。我找不到它

在本机反应中找不到 Firebase crashlytics 崩溃日志?