(改造)找不到类崩溃应用程序的转换器
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