2017-06-30 1 views
0

Salut, je travaille avec une API, qui renvoie la page de connexion lorsque le jeton de session est invalide/réponse JSON si la session est valide. Comment puis-je l'implémenter avec Retrofit, c'est-à-dire avoir plusieurs types de réponses?Comment puis-je analyser la réponse à travers Retrofit 2 si la réponse peut être à la fois un JSon/HTML?

P.S C'est une ancienne API qui ne peut pas être modifiée. Je suis nouveau pour rénover, je serai vraiment reconnaissant de votre aide.

+0

Comment la connexion fonctionne-t-elle dans votre application? Quelle est la source des informations d'identification pour la connexion, est-ce utilisateur? existe-t-il un service qui peut être utilisé pour vérifier si le jeton de session est valide? –

Répondre

0

posterais ce que commentaire car il est plus une suggestion alors de réponse réelle, mais ici il va:

(Si vous êtes complètement nouveau pour Retrofit laisser un commentaire pour expliquer plus en détail)

Vous pourrait rendre votre appel retourner une réponse comme ceci:

@GET("login/endpoint") 
Call<Response> getLogin(); 

que vous pouvez faire l'appel comme celui-ci

Call<Response> getLogin = ApiService.getLogin(); 
getLogin.enqueue(new Callback<Void>() { 
     @Override 
     public void onResponse(Call<Response> call, Response<Response> response) { 
      //here you can access Response.body() and use it to determine wether it's json or html and react accordingly 
     } 

     @Override 
     public void onFailure(Call<Response> call, Throwable t) { 
      //todo: error message 
     } 
    }); 

note: la réponse que j'ai utilisée provient de la bibliothèque OkHttp. Si cela ne fonctionne pas, vous pouvez essayer de créer votre propre convertisseur qui vérifie html/json et l'ajoute à la création de l'instance de retrofit. Je ne suis pas tout à fait sûr comment vous pouvez aller avec cela, mais cela semble avoir une idée générale: custom converter de futurestudio.

Si vous avez besoin de plus de conseils/clarification s'il vous plaît laissez-moi savoir je serai en mesure de répondre plus tard aujourd'hui.