2017-10-05 4 views
2

J'ai déjà essayé des choses différentes sans succès alors je pensais à changer pour une autre bibliothèque et essayer, mais je vais laisser ceci ici d'abord au cas où.Retrofit2 mauvaise réponse de format

J'ai une application qui fait 2 GET et 2 POST à ​​3 URL différentes, et j'ai des problèmes avec le dernier.

Je possède ce Retrofit méthode POST:

@Headers({ 
      "Accept: text/html", 
      "Accept-Encoding: gzip, deflate, br", 
      "Accept-Language: es-ES,es;q=0.8", 
      "Cache-Control: no-cache", 
      "Content-Type: application/x-www-form-urlencoded" 
    }) 
    @FormUrlEncoded 
    @POST("index.php?operacion=consulta") 
    Call<String> postRaiaSearch(@Header("Cookie") String cookie, @Field("microchip") String microchip); 

Et, avant d'expliquer le problème que je tiens à préciser que je l'ai déjà essayé Changin Call<String> avec Call<ResponseBody>, ou l'envoi de la charge utile @Field (avec @FormUrlEncoded et Content-Type en-tête comme application/x-www-form-urlencoded) et aussi comme @Body avec RequestBody.

Mais tout me donne la même réponse mal formatée.

Voici un échantillon du corps de la réponse REST Advanced client bien formaté:

RAW: enter image description here

analysables: enter image description here

Et le monstre qui rénovent donne à moi:

enter image description here

Comme vous pouvez le voir, la première mauvaise chose est que le web renvoie un HTML au lieu d'un JSON, mais je pensais que je pouvais l'obtenir simplement en texte brut, mais cela ne s'est pas bien passé.

Si vous demandez, voilà comment je fait l'objet Rénovation:

public static Retrofit getRaiaApi() { 
    if (raiaRetrofit == null) { 
     raiaRetrofit = new Retrofit.Builder() 
       .baseUrl(RAIA_URL) 
       .addConverterFactory(ScalarsConverterFactory.create()) 
       .build(); 
    } 
    return raiaRetrofit; 
} 

Et j'ai aussi essayé d'ajouter .addConverterFactory(GsonConverterFactory.create()), ou la suppression de la ligne Scalaires (avec le Gson un seulement), ou même simplement de supprimer à la fois d'eux.

Je ne pense pas que vous avez vraiment besoin de la méthode qui vous appelle cette méthode POST, mais je vais le coller quand même:

private void nextRaiaSearch(String header) { 
    callRaiaSearch = apiInterfaceRaia.postRaiaSearch(header, chipInput); 
    callRaiaSearch.enqueue(new Callback<String>() { 
     @Override 
     public void onResponse(Call<String> call, Response<String> response) { 
      Log.v("call", "onResponse"); 
      Log.v("call", response.body()); 
     } 

     @Override 
     public void onFailure(Call<String> call, Throwable t) { 
      Log.v("call", "onFailure"); 
     } 
    }); 
} 

Dois-je essayer quelque chose comme Volley ou tout autre chose au lieu de Retrofit juste pour ce une requête?

Les importations effectuées sont:

compile 'com.google.code.gson:gson:2.8.2' 
compile 'com.squareup.retrofit2:retrofit:2.3.0' 
compile 'com.squareup.retrofit2:converter-gson:2.3.0' 
compile 'com.squareup.retrofit2:converter-scalars:2.3.0' 
+0

quel type d'API vous utilisez (envoyer des données au serveur ou recevoir des données pour le serveur) GET ou POST –

+0

C'est un POST et je veux la réponse, alors recevez, mais le principal problème est que le web n'a pas de API, donc ça te donne tout le HTML du web, et je le prendrais volontiers, je peux extraire les valeurs que je veux à partir de là, mais tu peux voir le format que m'offre Android, plein de diamants et d'interrogations – JMedinilla

+0

Puis-je demander pourquoi définissez-vous le type de contenu de la demande à «Content-Type: text/plain» et en ajoutant le convertisseur Gson? Ne devrait-il pas s'agir de '' Content-Type: application/json'' qui est ce que le retrofit met par défaut. – Fred

Répondre

1

Ok, je suis arrivé une solution pour ce gâchis de réponse que je RECEVOIR. Le problème a été l'un des en-têtes de la méthode POST:

Accept-Encoding: gzip, deflate, br

Un en-tête, on m'a dit de mettre, mais je ne l'ai pas besoin du tout, puisqu'il comprimait le texte.Maintenant, je reçois des réponses de réponse normale, comme dans le reste brut avancé réponse du client:

enter image description here

Le problème est maintenant différent et il est que je dois trouver comment donner plus de taille ro le tampon d'amélioration, depuis la La réponse est tronquée, même avant la moitié de tout le HTML. Mais c'est une autre question, et plus facile à réaliser, je suppose.