找不到翻新注释。(参数1)


72

我想从URL中获取RSS代码Retrofit,如果我在get批注中静态输入url,则一切正常,但使用动态url时会出错。

我的界面服务:

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.** { *; }

您应该验证您的请求代码,所有改装请求注释都应该在那里并且格式正确。检查更多这里:readyandroid.wordpress.com/...
就绪的Android

Answers:


54

除了Destil的答案

确保parameters您通过的retrofit interface methods(i.e callbacks, headers, body )仅属于retrofit package。例如,不是您想要的自定义回调。


7
确保它也属于正确的改装包。在我来说,我不小心从进口改装的,而不是retrofit2注释
扬ķ

243

我的问题是我有@POST注释,但是忘记@Body了参数的注释。


不幸的是,这不适用于/ @ Query注释,因为您会收到错误:retrofit.RetrofitError:/ @ Body参数不能与表单或多部分编码一起使用。(参数1)
IgorGanapolsky

天哪,您节省时间。多谢,伙计。由于发展迅速,我也忘记了该注释。
Maher Nabil

@PUT也是一个问题
Lou

16

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

例如:

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

8

我的问题是我正在使用Kotlin协程并在Retrofit GET方法中使用了“挂起”。只需将其删除,一切正常。


更确切地说,您应该删除“ suspend”关键字。谢谢。
鲁斯兰·列申科

没有为我工作,它说无法创建适配器!
何塞

我遇到了同样的问题。那么我们如何在API服务函数上使用suspend?
亚伯拉罕·马修

8

为时已晚,但我只是面临着同样的问题。我在翻新界面和viewModel上使用带有“ deferred”和“ await”的翻新2.5.0。我从翻新的github上了解到,不推荐使用从2.6.0版推迟,可以将其从“推迟”切换为“暂停”。在我提高改造版本之前,我只是简单地从推迟更改为挂起并运行它,并遇到了同样的错误。我通过将改造版本从2.5.0移到2.6.0来解决了这个问题。

我的观点是,您的应用程序中当前的改造版本可能不支持在改造相关类或接口中使用改造的方式。


3
就是这个!从2.5更新到2.6为我解决了这个问题,谢谢!
waseefakhtar

@waseefakhtar没问题:)
KingJinho


3

您可能忘了先初始化适配器,如改造API中所述:

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

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




1

就我而言,当我开始使用翻新2时,我只是忘记删除服务调用的Callback参数。请确保您没有犯我的愚蠢错误。


1

我忘了加 @Field("")

先前

   @POST("/api/verify-phone")
    @FormUrlEncoded
    fun sendOTP(phone_number: String): Observable<SignInResponse?>

固定

@POST("/api/verify-phone")
@FormUrlEncoded
fun sendOTP(@Field("phone")phone_number: String): Observable<SignInResponse?>

1

(科特琳)我在这里解决了:

//@FormUrlEncoded // Don't used
@POST("orders")
fun saveOrders(@Body orders: Orders): Call<OrdersResponse>

您收到错误消息是因为您忘记在参数中添加@字段注释,并使用了@ FormUrlEncoded
P1NG2WIN 2012年

1

就我而言,我使用Retrofit 2.5.0而不是最新版本。更新到2.9.0,一切再次正常。


0

当我在网络服务接口中使用暂停功能时,发生了这种情况。

interface Service {
    @GET("chapters")
    suspend fun fetchChapters() : List<NetworkChapter>

我通过做两件事解决了它。1.使用Gson代替Moshi库。从改造中卸下moshi转换器,然后使用Gson转换器。2.从改造中移除协程转换器工厂。我认为这是主要问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.