Ajouter un Paramètre d'en-Tête pour le Rétrofit
Je suis en train de l'appeler et de l'api qui m'oblige à passer une clé API.
Mon Sercive appel à l'aide de HtppURLconnection fonctionne parfaitement.
url = new URL("https://developers.zomato.com/api/v2.1/search?entity_id=3&entity_type=city&q=" + params[0]);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestProperty("user-key","9900a9720d31dfd5fdb4352700c");
if (urlConnection.getResponseCode() != 200) {
Toast.makeText(con, "url connection response not 200 | " + urlConnection.getResponseCode(), Toast.LENGTH_SHORT).show();
Log.d("jamian", "url connection response not 200 | " + urlConnection.getResponseCode());
throw new RuntimeException("Failed : HTTP error code : " + urlConnection.getResponseCode());
}
Howevver, je ne suis pas sûr de savoir comment cela fonctionne avec les Rénovations que mon appel en Panne à tout moment.
Voici le code que j'suis usiong pour le même service d'appel
@GET("search")
Call<String> getRestaurantsBySearch(@Query("entity_id") String entity_id, @Query("entity_type") String entity_type, @Query("q") String query,@Header("Accept") String accept, @Header("user-key") String userkey);
et je suis en utilisant le présent de l'appeler
Call<String> call = endpoint.getRestaurantsBySearch("3","city","mumbai","application/json","9900a9720d31dfd5fdb4352700c");
Tous ces appels vont dans le OnFailure Méthode en Rénovation.
Si je les envoie sans le HeaderParameters, il va dans le Succès avec un 403, car j'ai évidemment besoin de passer la clé api quelque part, mais je ne peux pas comprendre comment.
@GET("search")
Call<String> getRestaurantsBySearch(@Query("entity_id") String entity_id, @Query("entity_type") String entity_type, @Query("q") String query);
L'erreur que je reçois dans OnFailure est
java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 2 path $
- ajouter un journalisation de l'intercepteur pour votre rénovation exemple, parce que votre appel est mal paramétré
- compiler 'com.squareup.okhttp3:enregistrement-intercepteur:3.0.0'
- J'ai utilisé le au-dessus de la dépendance. Une Idée de comment je faire à partir de là?
- il est dépendent de okhttp version utiliser la même version
- avez-vous essayé ma réponse?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser la sous
et
Ci-dessus est basé dans le zomato api qui est documenté à
https://developers.zomato.com/documentation#!/restaurant/recherche
Chose à noter est la fin de la variation de un point de api/v2.1/recherche et l'en-Tête
@Headers("user-key: 9900a9720d31dfd5fdb4352700c")
.Également vérifier votre url de base
.baseUrl("https://developers.zomato.com/")
Aussi j'ai essayé avec une clé api, j'ai généré et il fonctionne
et ma requête a été cafés comme l'a suggéré l'zomato de la documentation.
Remarque : j'espère que vous avez ci-dessous
et le ci-dessous dans la construction.gradle fichier
Edit:
Vous pouvez également passer en-tête avec la dynamique de la valeur en tant que ci-dessous
Et
D'essayer ce type d'en-tête de Rénovation 1.9 et 2.0. Pour Json Type De Contenu.
Vous pouvez ajouter beaucoup plus de têtes que j'.e
Après avoir essayé une couple de fois j'ai compris la réponse.
L'erreur
a été à venir en raison de l'échec de parser le json.
Dans l'appel de méthode, j'ai été en passant une Chaîne au lieu d'une classe POJO.
Je devrais avoir passé au lieu de l'Appeler<Chaîne> le type d'Appel<Données>
Données de la classe Pojo
quelque chose comme cela
Aussi loin que je peux voir que vous êtes de transmettre les données de manière incorrecte.
Votre méthode
getRestaurantsBySearch
est d'accepter les deux dernières paramètre comme champ d'en-tête-je.eaccept
etuser-key
. Mais tout en appelant la méthode que vous êtes de passage en-têtes de premier.Transmettre les données que vous avez déclaré dans la signature de la méthode de
getRestaurantsBySearch
Veuillez jeter un oeil à la réponse. Il montre clairement que la clé api que vous avez fournie est erronée. Tout d'abord, vous obtenez la bonne clé api. Puis l'appel de la demande de travail
.