Reputation: 2395
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
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
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
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
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
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
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
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