Rénovation de jeter exception IllegalArgumentException asynchrones FormUrlEncoded SUPPRIMER appel
Je suis en train de faire de l'asynchrone POST et SUPPRIMER ce qui est de la forme de l'url encodée à l'aide de Rénovation dans Android 4.4
Voici mon client
@FormUrlEncoded
@POST(INetwork.API_BASE_PREFIX + "/memberships.json")
void join(@Field("id") String id, Callback<?> cb);
@FormUrlEncoded
@DELETE(INetwork.API_BASE_PREFIX + "/memberships.json")
void leave(@Field("id") String id, Callback<?> cb);
Et c'est l'exception -
java.lang.IllegalArgumentException: IRepositoryClient.leave: FormUrlEncoded can only be specified on HTTP methods with request body (e.g., @POST).
at retrofit.RestMethodInfo.methodError(RestMethodInfo.java:118)
at retrofit.RestMethodInfo.parseMethodAnnotations(RestMethodInfo.java:191)
at retrofit.RestMethodInfo.init(RestMethodInfo.java:128)
at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:329)
at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:264)
at retrofit.RestAdapter$RestHandler$2.obtainResponse(RestAdapter.java:315)
at retrofit.CallbackRunnable.run(CallbackRunnable.java:42)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at retrofit.Platform$Android$2$1.run(Platform.java:142)
at java.lang.Thread.run(Thread.java:841)
J'ai regardé à travers la source et, fondamentalement, si la méthode n'a pas un corps, et que la demande est formurlencoded, cette exception est levée. Aussi, j'ai remarqué que tous les exemples de FormUrlEncoded fonctionne parfaitement quand il n'est pas asynchrone, c'est à dire que j'ai un type de retour d'une certaine sorte et pas de rappel - désolé, je suis un peu perdu
Dois-je envoyer un corps est vide? Suis-je obligé d'envoyer l'un et ne pas le @paramètres du Champ suffira?
À L'Aide De Rénovation 1.5.0
@FormUrlEncoded
? C'est un encodage du contenu et de suppression ne semble pas avoir de contenu.1. Ne pouvez pas utiliser les paramètres du champ sans codage - Si je fais ça il y a une exception java.lang.IllegalArgumentException:@Field les paramètres peuvent uniquement être utilisé avec le formulaire d'encodage. (paramètre #1). 2. Supprimer n'ont de contenu, il a l'Id
OriginalL'auteur Rickster | 2014-03-22
Vous devez vous connecter pour publier un commentaire.
La RFC HTTP est pas clair si oui ou non la méthode de SUPPRESSION est autorisée à avoir un corps de requête ou non. Rénovation soulève une erreur sur le côté de la prudence de ne pas avoir un.
Cependant, vous pouvez toujours inclure un (en supposant que le client HTTP prend en charge) à l'aide d'un custom HTTP méthode d'annotation.
Maintenant de définir votre méthode de l'interface en utilisant les annotations personnalisées que vous avez défini.
Tellement simple et très flexible. J'aime Rénovation.
comment obtenir respone en json
OriginalL'auteur
Mise à jour de la réponse de Rénovation 2.0:
Rénovation 2 ne semble pas avoir @RestMethod plus, voici donc ce qui fonctionne:
De rénovation 2.+
et pour RxRetrofit 2.+
a sauvé ma vie! chemin = "votre url api"
comment obtenir respone en json
OriginalL'auteur