10
votes

Manipulation des erreurs personnalisées avec la modernisation

L'API de repos avec qui je travaille possède des codes personnalisés et des messages envoyés de serveur en fonction de l'état, je voudrais implémenter un rachat personnalisé code> qui appelle le Succès code> Méthode uniquement si le code d'état était 0.

Exemple de réponse de réussite reçue du serveur: strong> p>

{
  "code":"301",
  "message":"wrong_password",
  "data": {
    "actual_data":"will_be_null",
    "no_need_to_construct_objects","from_data"
  }
}


9 commentaires

En réalité, ReleCit fournit un moyen de construire votre propre gestionnaire d'erreur personnalisé!


Pourriez-vous me donner des pointeurs ou où regarder un échantillon?


Square.github.io/retrofit "Manipulation de l'erreur personnalisée"


C'est pour les codes de statut, ce que je recherche est à l'intérieur de la réponse, http 200 est renvoyé, mais à l'intérieur des données de réponse, il y a les erreurs / messages ou aucun.


Il obtient toute la réponse et les gère en conséquence! Si votre réponse contient plus de données, vous pouvez l'utiliser à votre manière! Ce n'est pas seulement pour le code de statut!


Je suis à peu près sûr que vous vous trompez, il ne sera même pas appelé car si le résultat est HTTP 200 Restrofit appellera Succès () et il n'y a donc pas d'objet rénovitError ni échec () appels.


Si tel est le cas, désolé de vous avoir confiné!


Avez-vous trouvé un bon moyen de faire cela? J'ai aussi le même problème avec toi


J'ai le même problème ?? Est-ce vous avez trouvé quelque chose??


5 Réponses :


0
votes

Cela aura au moins vous aider à démarrer. Vous pouvez essentiellement créer votre propre rappel personnalisé, puis gérer le succès. Regardez ce qui a été envoyé et faites ce que vous devez.

  public class CustomCallback implements Callback {
    @Override
        public void success(Object o, Response response) {

                //Check for success
                //if( Success )
                //callback.success(o, response);
                //else
                //Check for error
                //callback.failure(error);


        }
    }


0 commentaires

3
votes

Vous pouvez le faire rapidement en effectuant une classe abstraite qui implémente le rappel et déclarer vos propres méthodes de réussite et de défaillance abstraites. La classe Abstract gérera les méthodes de rappel standard de Retrofit, interprétera la réponse et appelera les méthodes abstraites en conséquence.

Je pense qu'une autre approche possible de ceci consiste à remplacer l'interface client de rénovation pour créer votre propre objet de réponse. P>

Si vous étendez OkClient A >, cela peut aller comme ceci: p>

public class CustomClient extends OkClient {

    @Override public Response execute(Request request) throws IOException {
          Response originalRespone = super.execute(request);

          int statusCode = 0;
          //TODO: read JSON response here (using GSON or similar, and extract status code and message... etc.)

          //Convert the status code to HTTP standard status codes, according to the documentation you have.
          if(statusCode == 0) statusCode = 200;
          //Reconstruct a Response object
          return new Response(originalResponse.getUrl(), statusCode, originalResponse.getReason() /*should probably replace with parsed message*/, originalResponse.getHeaders(), originalResponse.getBody());
    }


0 commentaires

0
votes

Dans votre cas, vous pouvez avoir une classe qui mappe votre réponse JSON:

class CustomResponse {
  String code;
  String message;
  Data data;

  static class Data {
    String actualData;
    String needToContructObjects;
    String noNeedToContructObjects;
  }
}


0 commentaires

1
votes

Créer une réponse de réponse personnaliséeConverter comme ceci: xxx


1 commentaires

Comment cette utilisation avec modernité



1
votes

C'est une meilleure idée de mettre en œuvre un rappel personnalisé. Vous pouvez un exemple à ce sujet ci-dessous.

void yourMethod(DefaultRequestCallback<YourResponseBean> callback);


0 commentaires