Tak więc Retrofit 2.0.0 został niedawno wydany i tak naprawdę nie ma żadnych zaktualizowanych przykładów jego użycia, ale próbuję zaimplementować go dla podstawowego wywołania API. Dostaję
java.lang.IllegalArgumentException: Unable to create converter for class`
spowodowany
Caused by: java.lang.IllegalArgumentException: Could not locate converter for class orbyt.app.dataclass. Tried:
* retrofit.OkHttpBodyConverterFactory
Podczas próby wywołania interfejsu API.
Odpowiedzi:
Miałem ten sam problem. Naprawiłem to, dodając:
compile 'com.squareup.retrofit2:converter-gson:<latest-version>'
do mojego build.gradle
Następnie określ konwerter podczas tworzenia mojej instancji Retrofit.
Retrofit retrofit = new Retrofit.Builder() .baseUrl(Constants.API_BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .build();
źródło
.addConverterFactory(GsonConverterFactory.create())
. Łączenie konwerterów za pomocą gradle jest oczywiście czystszą opcją, więc oznaczenie tego jako odpowiedzi.converter-gson
pasuje do Twojej wersjiretrofit
- zobacz stackoverflow.com/questions/32902157/ ...W programie Retrofit 2.0, konwerter nie jest zawarty w pakiecie, a gdy używasz Retrofit 2.0, upewnij się, że postępuj zgodnie z nowym wzorcem adresu URL
Podstawowy adres URL: zawsze kończy się na /
@Url: NIE zaczynaj od /
Retrofit retrofit = new Retrofit.Builder() .baseUrl(Constants.API_BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .build();
Aby uzyskać więcej informacji na temat 2.0, kliknij ten link. Retrofit 2.0: największa aktualizacja
A także zaktualizuj build.gradle.
implementation "com.squareup.retrofit2:converter-gson:$retrofit_version"
I dodaj rozszerzenie w pliku build.gradle na poziomie projektu
ext { retrofit_version= "2.x.x" }
źródło
Zmień odpowiednio wersję modernizacji
Dla mnie poniżej zależność już tam była
compile 'com.squareup.retrofit2:retrofit:2.0.2'
Dla gson 2.0.2 zmieniłem
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
Następnie dodaj
Retrofit retrofit = new Retrofit.Builder() .baseUrl(Constants.API_BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .build();
źródło
W przypadku Retrofit V2 dodaj następujące repozytoria -
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'
Teraz użyj poniższego kodu -
Retrofit retrofit = new Retrofit.Builder() .baseUrl(API_URL) .addConverterFactory(GsonConverterFactory.create()) .build();
Mam nadzieję, że to pomoże :)
źródło
W najnowszym Retrofit 2.0 należy zaimportować najnowszą wersję:
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'
Uważaj, wywołanie
baseUrl()
, w wersji 2.0, powinno kończyć się znakiem „/”, aw metodzie nie rozpoczynałbyś url od znaku „/”@POST("classes/info") Call<ContactBean> insertInfo(@Body ContactBean bean);
I możesz zobaczyć Retrofit, aby uzyskać więcej informacji! Mam nadzieję, że pomogę!
źródło
W moim przypadku (Kotlin z coroutines) otrzymałem wyjątek:
Wystąpił problem w żądaniu:
@FormUrlEncoded @Streaming @POST("export-pdf/") suspend fun exportPdf( @Field("token") token: String ): Call<ResponseBody>
Usunięto
suspend
z definicji i zniknęły wyjątki.źródło