(Retrofit) No se pudo ubicar el convertidor para la aplicación de falla de clase

81

Así que Retrofit 2.0.0 se lanzó recientemente y realmente no hay ejemplos actualizados sobre cómo usarlo, pero estoy tratando de implementarlo para una llamada API básica. Estoy recibiendo un

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

causado por

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

Al intentar hacer la llamada api.

Orbita
fuente
No sé Retrofit, supongo que hay una anotación que puede especificar el convertidor en alguna parte.
Jiang YD
@JiangYD no estoy seguro de lo que quieres decir
Orbit
necesita publicar más código sobre este error. Publica tu llamada de API.
heloisasim
El ejemplo de square.github.io/retrofit arroja este error. Pruébelo si no le cree a la persona que hace la pregunta o si quiere más detalles. No están tratando de hacer nada elegante.
Andrew Koster

Respuestas:

134

Estaba enfrentando el mismo problema. Lo arreglé agregando:

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

a mi build.gradle

Luego especifique el convertidor al crear mi instancia de Retrofit.

Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(Constants.API_BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();
YacSrk
fuente
2
Así que arreglé esto anoche básicamente copiando estas 2 clases en mi proyecto y llamando al .addConverterFactory(GsonConverterFactory.create()). Vincular los convertidores a través de gradle es obviamente una opción más limpia, por lo que marcar esto como la respuesta.
Orbita
1
También asegúrese de que su versión converter-gsoncoincida con la suyaretrofit propia; consulte stackoverflow.com/questions/32902157/…
gravitron
Esta respuesta está desactualizada, Gradle ni siquiera se sincronizará con esta versión, y mucho menos compilará. Necesita compilar 'com.squareup.retrofit2: converter-gson: 2.0.2'
Andrew Koster
15

En Retrofit 2.0, Converter no está incluido en el paquete y cuando esté utilizando Retrofit 2.0 asegúrese de seguir el nuevo patrón de URL

URL base: siempre termina con /

@Url: NO empiece con /

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

Para obtener más información sobre 2.0, siga este enlace Retrofit 2.0: La mayor actualización

Y también actualice build.gradle.

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

Y agregue la extensión en el archivo build.gradle de nivel de proyecto

ext {
retrofit_version= "2.x.x"
}
Ajit Kumar Dubey
fuente
Esta respuesta no incluye la dependencia de Gradle relevante.
Andrew Koster
@Ak He mencionado el mejor enlace de actualización más grande que han mencionado todas estas cosas. Necesidad de actualizar la API en base a la versión actual
Ajit Kumar Dubey
7

Cambie la versión de actualización en consecuencia

Para mí debajo de la dependencia ya estaba ahí

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

Para gson 2.0.2 cambié

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

Luego añade

Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(Constants.API_BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();
Abilash Rajasekaran
fuente
Esta respuesta está actualizada, debería tener más votos que la desactualizada y más que la que ni siquiera incluye la dependencia relevante.
Andrew Koster
6

Para Retrofit V2, agregue los siguientes repositorios:

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'

Ahora use el siguiente código:

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

Espero que ayude :)

Neo
fuente
3

En el último Retrofit 2.0, debe importar la última versión:

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'

Tenga cuidado al llamar baseUrl(), en la v2.0, debería estar al final de "/", y en el método, no comenzaría la URL con "/"

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

¡Y puede ver Retrofit para obtener más información! ¡Espero ayuda!

Joe
fuente
1

En mi caso (Kotlin con corrutinas) recibí la excepción:

No se puede crear un convertidor para la modificación 2.

para el método Queries.exportPdf.

Causado por: java.lang.IllegalArgumentException: No se pudo localizar el convertidor ResponseBody para retrofit2.Call

Hubo un problema en una solicitud:

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

Eliminado suspendde la definición y desaparecieron las excepciones.

CoolMind
fuente