web-dev-qa-db-ja.com

レトロフィット注釈が見つかりません。 (パラメーター#1)

Retrofitを使用してURLからRSSコードを取得し、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.** { *; }
50
mk72

デスティルの答えへの追加

retrofit interface methods(i.e callbacks, headers, body )に渡すparametersretrofit packageのみに属していることを確認してください。例えば独自に必要なカスタムコールバックではありません。

40

私の問題は、@POST注釈、ただし@Body注釈のパラメーター。

175
David Vávra

また、GET/POSTを発行するかどうかに応じて、すべてのパラメーターに@Queryまたは@Fieldを必ず追加してください。

例えば:

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

私は@Post注釈ですが、@Fieldおよび@FormUrlEncoded注釈

7
Alberto M

使用しているPathクラスを確認し、パッケージがretrofit2.http.Path の代わりに org.simpleframework.xml.Path。これは、一般的なレトロフィット注釈の間違いです。

2

おそらくレトロフィットAPIで述べたように、最初にアダプターを初期化するのを忘れていました。

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

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

2
dominik4142

私の問題は、Kotlinコルーチンを使用しており、Retrofit GETメソッドで「サスペンド」を使用していることです。削除するだけで、すべて正常に動作します。

2
MrVasilev

retrofit interfaceからこれに属さないすべてのパラメーターを削除します。

1
lucasddaniel

私の場合、レトロフィット2の使用を開始したときに、サービスコールのコールバックパラメーターを削除するのを忘れていました。

1
Sfseyhan