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é:
Et le monstre qui rénovent donne à moi:
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'
quel type d'API vous utilisez (envoyer des données au serveur ou recevoir des données pour le serveur) GET ou POST –
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
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