找不到改造注释。 (参数#1)

时间:2015-02-06 17:22:27

标签: android android-studio retrofit

我想从带有Retrofit的网址获取RSS代码,如果我在获取注释中静态输入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.** { *; }

17 个答案:

答案 0 :(得分:162)

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

答案 1 :(得分:39)

除了Destil的回答

确保传递给var linkHandler = function(ev) { ev.preventDefault(); if (location.hash !== this.hash) window.history.pushState(null, null, this.hash); // using the history api to solve issue #1 - back doesn't work // most browser don't update :target when the history api is used: // THIS IS A BUG FROM THE BROWSERS. // change the scrolling duration in this call smoothScroll(document.getElementById(this.hash.substring(1)), 1000, function(el) { location.replace('#' + el.id); // this will cause the :target to be activated. }); 的{​​{1}}仅属于parameters。例如不是您想要的自定义回调。

答案 2 :(得分:9)

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

例如:

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

答案 3 :(得分:7)

我有mongodb.MongoClient.connect()注释,但忘记了@Post@Field注释

答案 4 :(得分:2)

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

答案 5 :(得分:2)

您可能忘记首先初始化适配器,如改造api中所述:

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

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

答案 6 :(得分:1)

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

答案 7 :(得分:1)

对我来说实际问题很老okhttp。即使将改造更新到 2.6.0 也会出现同样的错误。

okhttp_version = "3.12.1"//remove
okhttp_version = "4.4.0"//works

答案 8 :(得分:1)

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

答案 9 :(得分:1)

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

balanceOf

答案 10 :(得分:1)

在我的情况下,当我开始使用改装时,我只是忘记删除服务调用的Callback参数2.确保你没有做出我做过的愚蠢错误。

答案 11 :(得分:0)

我忘记添加@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?>

答案 12 :(得分:0)

这是我在网络服务界面中使用暂停功能时发生的。

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

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

答案 13 :(得分:0)

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

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

答案 14 :(得分:0)

改装界面中删除所有不属于此的参数。

答案 15 :(得分:0)

在我的例子中,我使用@Post 和 @body,但是当我使用给对象而不是参数时使用多个选项而不是一个类来解决我的问题

答案 16 :(得分:0)

确保添加所有必需的依赖项:

implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.squareup.okhttp3:logging-interceptor:4.5.0'