2
votes

Quelle est la raison de cette erreur et comment y remédier?

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


5 commentaires

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 !!!!!!!!!


3 Réponses :


3
votes

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)


6 commentaires

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 en Deferred > Pour référence -> @POST ("userLogin") fun userLogin (@Query ("userName") userName: String, @Query ("userPassword") userPassword: String): Réponse


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`



0
votes

addCallAdapterFactory (CoroutineCallAdapterFactory ())


0 commentaires

2
votes

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.


0 commentaires