Orbit
Orbit

Reputation: 2395

(Retrofit) Could not locate converter for class crashing app

So Retrofit 2.0.0 was recently released and theres not really any updated examples on how to use it, but im trying to implement it for a basic API call. Im getting a

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

caused by

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

When trying to make the api call.

Upvotes: 94

Views: 48231

Answers (7)

ilyamuromets
ilyamuromets

Reputation: 413

I know that it's old question. But I've faced the same problem. And no one answer suits to me.
According to the documentation, it ships with support for OkHttp's RequestBody and ResponseBody types.
So no need to include .addConverterFactory(AnyFactory.create()) in your builder. There is an opportunity works with raw type of a response. All you need is to return Response<ResponseBody> or Call<ResponseBody> or Single<Response<ResponseBody>> from an interface of api.

Upvotes: 2

Ajit Kumar Dubey
Ajit Kumar Dubey

Reputation: 1563

In Retrofit 2.0, Converter is not included in the package and when you are using Retrofit 2.0 Make Sure follow new URL pattern

Base URL: always ends with /

@Url: DO NOT start with /

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

For more information about 2.0 Follow this link Retrofit 2.0: The biggest update

And also update build.gradle.

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

And add the extension in project level build.gradle file

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

Upvotes: 18

CoolMind
CoolMind

Reputation: 28865

In my case (Kotlin with coroutines) I received the exception:

Unable to create converter for retrofit2.Call

for method Queries.exportPdf.

Caused by: java.lang.IllegalArgumentException: Could not locate ResponseBody converter for retrofit2.Call

A problem was in a request:

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

Removed suspend from definition and exceptions disappeared.

Upvotes: 1

YacSrk
YacSrk

Reputation: 1575

I was facing the same issue. I fixed it by adding :

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

to my build.gradle

Then specify the converter when creating my Retrofit instance.

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

Upvotes: 151

Abilash Rajasekaran
Abilash Rajasekaran

Reputation: 71

Change retrofit version accordingly

For me below dependency was there already

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

For gson 2.0.2 I changed

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

Then add

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

Upvotes: 7

joe
joe

Reputation: 639

In the latest Retrofit 2.0,you should import the latest version :

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'

Be careful call baseUrl(),at v2.0,it should be end of "/",and at the method ,you would’t start thr url with"/"

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

And you can see Retrofit to get more info! Hope help !

Upvotes: 3

Neo
Neo

Reputation: 3584

For Retrofit V2 add the following repositories -

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'

Now use below code -

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

Hope it will help :)

Upvotes: 6

Related Questions