web-dev-qa-db-fra.com

RxJavaCallAdapterFactory ne peut pas être converti en usine

J'essaie d'utiliser Retrofit 2 et RxJava en suivant le guide de ce https://inthecheesefactory.com/blog/retrofit-2.0/fr

Dans la section "Intégration de RxJava avec CallAdapter ", Explique comment utiliser RxJava avec la modernisation

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("http://api.nuuneoi.com/base/")
    .addConverterFactory(GsonConverterFactory.create())
    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
    .build();

Cependant, lors de la compilation, l'erreur suivante apparaît:

Error:(63, 71) error: incompatible types: RxJavaCallAdapterFactory cannot be converted to Factory

Comment puis-je résoudre ce problème? Merci

12
Luisa Repele

Assurez-vous que vous utilisez le même identifiant de groupe et la même version pour la dépendance principale Retrofit, la dépendance du convertisseur Gson et la dépendance de l'adaptateur RxJava.

J'imagine que le vôtre ressemble à quelque chose comme ça:

compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
compile 'com.squareup.retrofit:adapter-rxjava:2.0.0-beta2'

(Notez qu'ils utilisent des groupes différents et des numéros de version différents)

Ils devraient tous ressembler à ceci:

compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'
41
Jake Wharton

L'ajout de "com.squareup.retrofit: adapter-rxjava: 2.0.0" donne l'erreur suivante

Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'. > com.Android.build.api.transform.TransformException: com.Android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/rxjava.properties

Mais, au lieu de cela, l'ajout de "compile" com.jakewharton.retrofit: retrofit2-rxjava2-adapter: 1.0.0 "rend l'emballage réussi.

2
Amit Maskery

changez votre adaptateur RXJava Rénové en 

  implementation "com.squareup.retrofit2:adapter-rxjava2:$retrofit_version"

Et changez votre CallAdapterFactory en

.addCallAdapterFactory(RxJava2CallAdapterFactory.create())

ça va ressembler à quelque chose comme ça

.baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();
0
Eldhopj