Je veux obtenir le code RSS d'une URL avec Retrofit
et si j'entre url de manière statique dans l'annotation à obtenir tout est OK, mais avec une URL dynamique, j'obtiens une erreur.
Mon service d'interface:
public interface AllNewsService {
@GET("/fa/rss/{url}")
void getRss( @Path("url") String nGroup , Callback<AllNewsRss> callback);}
Et en appelant la méthode getRss:
DataGetter dg = new DataGetter();
dg.get().getRss("allnews" ,new Callback<AllNewsRss>() {
@Override
public void success(AllNewsRss allNewsRss, Response response) {
Log.d(TAG,"success");
}
@Override
public void failure(RetrofitError error) {
Log.d("*********",error.toString());
}
Je reçois l'erreur suivante:
retrofit.RetrofitError: AllNewsService.getRss: No Retrofit annotation found. (parameter #1)
Remarque: J'ai ajouté la ligne ci-dessous à proguard.cfg
mais cela n'a pas fonctionné
-keep class retrofit.** { *; }
Ajout à la réponse de Destil
Assurez-vous que la parameters
que vous passez à la retrofit interface methods(i.e callbacks, headers, body )
appartiennent uniquement à retrofit package
. par exemple. Pas les rappels personnalisés que vous voulez vous-même.
Mon problème était que j'avais l'annotation @POST
, mais que j'avais oublié l'annotation @Body
pour le paramètre.
Assurez-vous également que vous ajoutez @Query
ou @Field
pour tous les paramètres, selon que vous publiez ou non GET/POST.
par exemple:
@GET("/api/Books/GetAll")
void GetRecentBooks(@Query int Offset, Callback<List<Book>> cb);
J'avais l'annotation @Post
mais j'ai oublié les annotations @Field
et @FormUrlEncoded
Veuillez vérifier la classe Path
que vous utilisez et assurez-vous que le package est retrofit2.http.Path
au lieu de org.simpleframework.xml.Path
.
Vous avez probablement oublié d’abord d’initialiser l’adaptateur, comme indiqué dans l’api de modification:
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("https://api.github.com")
.build();
GitHubService service = restAdapter.create(GitHubService.class);
Dans mon cas, j’ai juste oublié de supprimer le paramètre Callback pour l’appel de service lorsque je commence à utiliser retrofit 2. Assurez-vous que vous n’avez pas commis l’erreur stupide que j’ai commise.
Supprimer de l'interface de modification tous les paramètres n'appartenant pas à cela.