2015-02-06 60 views
23

我想要得到一个带有Retrofit的URL的RSS代码,并且如果我在get注释中静态地输入url,那么一切正常,但是对于动态url,我得到一个错误。找不到改进注释。 (参数#1)

我的接口服务:

public interface AllNewsService { 
@GET("/fa/rss/{url}") 
void getRss(@Path("url") String nGroup , Callback<AllNewsRss> callback);} 

,并呼吁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()); 
     } 

我收到以下错误:

retrofit.RetrofitError: AllNewsService.getRss: No Retrofit annotation found. (parameter #1) 

注:我加了下面一行的proguard.cfg但它没有工作

-keep class retrofit.** { *; } 

回答

27

加成Destil的回答

确保parameters你传递给retrofit interface methods(i.e callbacks, headers, body)是只属于retrofit package。例如不是自己想要的自定义回调。

+3

的问题也确定它也属于* right * retrofit包。在我的情况下,我不小心从改造而不是retrofit2导入了注释 – 2017-01-13 18:32:18

1

你可能忘记了第一次初始化电源适配器,因为在改装API中提到:

RestAdapter restAdapter = new RestAdapter.Builder() 
.setEndpoint("https://api.github.com") 
.build(); 
GitHubService service = restAdapter.create(GitHubService.class); 

http://square.github.io/retrofit/

102

我的问题是,我有@POST注解,却忘了@Body标注为参数。

+0

不幸的是,这将不适用于/ @ Query注释,因为您将得到一个错误:** retrofit.RetrofitError:/ @ Body参数不能与窗体或多部分编码一起使用。 (参数#1)** – 2015-04-30 15:58:48

+0

'@ GET'注释怎样?我有同样的问题.. – iMDroid 2016-06-27 08:47:39

+0

这是正确的答案。 – VonSchnauzer 2016-10-27 11:49:05

4

还要确保您为所有参数添加@Query@Field,具体取决于您是否发出GET/POST。

如:

@GET("/api/Books/GetAll") 
void GetRecentBooks(@Query int Offset, Callback<List<Book>> cb); 
2

请检查您正在使用的Path类,并确保该包是retrofit2.http.Path而不是org.simpleframework.xml.Path。 这是一个常见的Retrofit注释错误。

1

在我的情况下,当我开始使用改进版2时,我忘记了删除了服务调用的回调参数。请确保您没有做我做的那个愚蠢的错误。

3

我有@Post注释却忘了@Field和@FormUrlEncoded注释

0

更新接口是不属于这个所有参数删除。