(改进)无法找到类崩溃应用的转换器


81

因此,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调用时。


不知道翻新,我想有一个注释可以在某处指定转换器。
姜YD

@JiangYD不确定您的意思
轨道

您需要发布有关此错误的更多代码。向您发布api调用。
heloisasim 2015年

square.github.io/retrofit上的示例抛出此错误。如果您不相信提出问题的人,或者您想获取详细信息,请尝试一下。他们没有试图做任何幻想。
安德鲁·科斯特

Answers:


134

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

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();

2
因此,我实际上是在昨晚解决此问题的,基本上是将这两个类复制到我的项目中并调用.addConverterFactory(GsonConverterFactory.create())。通过gradle链接转换器显然是一个更清洁的选择,因此将其标记为答案。
轨道

1
另外,还要确保你的版本converter-gson匹配您的版本的retrofit本身-见stackoverflow.com/questions/32902157/...
gravitron

这个答案已经过时,Gradle甚至不会与此版本同步,更不用说编译了。你需要编译“2.0.2 com.squareup.retrofit2:变流器GSON”
安德鲁·科斯特

15

在Retrofit 2.0中,转换器不包括在包装中,并且在使用Retrofit 2.0时,请确保遵循新的URL模式

基本网址:始终以/结尾

@网址:请勿以/开头

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

有关2.0的更多信息,请单击此链接Retrofit 2.0:最大的更新

并更新build.gradle。

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

并将扩展名添加到项目级别的build.gradle文件中

ext {
retrofit_version= "2.x.x"
}

这个答案不包括相关的Gradle依赖关系。
安德鲁·科斯特

@Ak我已经提到了最好的最大更新链接,他们已经提到了所有这些东西。需要基于当前版本更新API
Ajit Kumar Dubey

7

相应地更改改造版本

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

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();

这个答案是最新的,它的投票数应该比过时的票数还要多,甚至还不包括相关依赖性。
安德鲁·科斯特

6

对于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();

希望它会有所帮助:)


3

在最新的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,它应该以“ /”结尾,并且在方法中,您将不会以“ /”开头

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

您可以看到翻新以获得更多信息!希望对您有所帮助!


1

我的情况下(Kotlin和协程),我收到了例外:

无法创建用于Retrofit2.Call的转换器

用于方法Queries.exportPdf。

原因:java.lang.IllegalArgumentException:无法找到用于Retrofit2.Call的ResponseBody转换器。

请求中存在问题:

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.