Créer Retrofit CallAdapter pour Coroutines pour gérer la réponse en tant qu’états

Créer Retrofit CallAdapter pour Coroutines pour gérer la réponse en tant qu’états

La prochaine étape consiste à créer notre CallAdapter.Factory

CallAdapter.Factory n’a qu’une seule méthode abstraite que nous devrions mettre en œuvre qui est get.

get méthode dans le CallAdapter.Factory devrait renvoyer un adaptateur de rappel pour les méthodes d’interface qu’il pourrait gérer ou annuler s’il ne peut pas être géré par cette usine.

Donc simplement notre get méthode dans notre coutume CallAdapter.Factory devrait vérifier si le returnType est notre classe scellée pour les appels de réponse API, puis gérez-la.
Si l’appelant ne demande pas notre classe scellée, renvoyez null, ce n’est pas le bon adaptateur.

Qu’est-ce que ça veut dire?

Mais nous devons d’abord savoir comment suspend les fonctions fonctionnent avec Retrofit.

@GET("users/{id}")
suspend fun user(@Path("id") id: Long): User

Dans les coulisses, cela se comporte comme défini comme fun user(...): Call puis invoqué avec Call.enqueue

Cela signifie donc que lorsque nous avons une fonction de suspension comme celle-ci

suspend fun user(): ApiResponse

C’est en fait

fun user(): Call>

Donc, après avoir retiré le Call tapez, nous devons nous assurer que le type interne est ApiResponse

Maintenant, nous avons atteint un point, où nous avons la réponse ApiResponse

Ensuite, nous devons extraire les types de réussite et d’erreur du ApiResponse type paramétré.

La base CallAdapter.Factory dans Retrofit a une fonction nommée getParameterUpperBound ce qui devrait nous aider à obtenir les types de réussite / erreur du type paramétré ApiResponse

Ensuite, récupérez le convertisseur d’erreur et retournez

NetworkResponseAdapterFactory