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.** { *; }
デスティルの答えへの追加
retrofit interface methods(i.e callbacks, headers, body )
に渡すparameters
がretrofit package
のみに属していることを確認してください。例えば独自に必要なカスタムコールバックではありません。
私の問題は、@POST
注釈、ただし@Body
注釈のパラメーター。
また、GET/POSTを発行するかどうかに応じて、すべてのパラメーターに@Query
または@Field
を必ず追加してください。
例えば:
@GET("/api/Books/GetAll")
void GetRecentBooks(@Query int Offset, Callback<List<Book>> cb);
私は@Post
注釈ですが、@Field
および@FormUrlEncoded
注釈
使用しているPath
クラスを確認し、パッケージがretrofit2.http.Path
の代わりに org.simpleframework.xml.Path
。これは、一般的なレトロフィット注釈の間違いです。
おそらくレトロフィットAPIで述べたように、最初にアダプターを初期化するのを忘れていました。
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("https://api.github.com")
.build();
GitHubService service = restAdapter.create(GitHubService.class);
私の問題は、Kotlinコルーチンを使用しており、Retrofit GETメソッドで「サスペンド」を使用していることです。削除するだけで、すべて正常に動作します。
retrofit interfaceからこれに属さないすべてのパラメーターを削除します。
私の場合、レトロフィット2の使用を開始したときに、サービスコールのコールバックパラメーターを削除するのを忘れていました。