J'utilise kotlin
pour Android avec liaison de données
avec modèle MVVM
.
Retrofit2
pour envoyer et recevoir des appels API.
Lorsque j'envoie un appel de connexion, je reçois toujours un plantage et voici le message:
//my retrofit interface interface RetrofitInterface { @FormUrlEncoded @POST("userLogin") suspend fun userLogin( @Field("userName") userName: String, @Field("userPassword") userPassword: String ): Response<UserLoginResponse> companion object { operator fun invoke( networkConnectionInterceptor: NetworkConnectionInterceptor ): RetrofitInterface { val okHttpClient = OkHttpClient.Builder() .addInterceptor(networkConnectionInterceptor) .build() return Retrofit.Builder() .client(okHttpClient) .baseUrl("http://muUrlIsCorrect/") .addConverterFactory(GsonConverterFactory.create()) .build() .create(RetrofitInterface::class.java) } } } //My response class data class UserLoginResponse( var error: Boolean?, var message: String?, var user: User? )
I redessiné la réponse tant de fois et cela correspond en fait à la réponse de mon api. une aide si vous voulez?
java.lang.IllegalArgumentException: Unable to create call adapter for class java.lang.Object
3 Réponses :
Je pense que vous avez oublié d'ajouter .addCallAdapterFactory
dans votre Retrofit.Builder ()
Veuillez ajouter .addCallAdapterFactory (CoroutineCallAdapterFactory ())
si vous utilisez coroutines-kotlin sinon vous pouvez ajouter .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
Retrofit.Builder() .baseUrl(BuildConfig.BASE_URL) .addCallAdapterFactory(CoroutineCallAdapterFactory()) .addConverterFactory(GsonConverterFactory.create()) .build() .create(ApiInterface::class.java)
La classe CoroutineCallAdapterFactory appartient à ce gradle -> implémentation 'com.jakewharton.retrofit: retrofit2-kotlin-coroutines-adapte r: 0.9.2' Confirmez simplement que vous devez ajouter ce gradle. si vous avez déjà ajouté cette note, veuillez décrire votre erreur?
Menas votre première erreur est résolue, non? pour Deffered, vous devez changer Response
Vous devez donner une description complète de chaque erreur. sans détails d'erreur ne peut pas vous aider.
Comment obtenir mon utilisateur ou même le message de la réponse maintenant?
Vous pouvez utiliser cette façon? -> GlobalScope.launch {try {val response = service.userLogin ("userName", "userPassword"). Await () withContext (Dispatchers.Main) {handleMovieResponse (response)}} catch (e: Exception) {e. printStackTrace ()}}
ont toujours la même erreur `java.lang.IllegalArgumentException: Impossible de créer un adaptateur d'appel pour la classe java.lang.Object`
addCallAdapterFactory (CoroutineCallAdapterFactory ())
Pour toute personne qui vient plus tard pour ce problème. Cela se produit si vos méthodes de service de modernisation ne sont pas suspendues. Rendez les méthodes suspendues et ce problème est résolu.
publier le stacktrace complet
Qu'entendez-vous par stacktrace complet?
dans LogCat, publiez l'erreur stacktrace.
ouais, donnez-moi juste une minute s'il vous plaît.
Je ne peux pas tout poster !!!!!!!!!