web-dev-qa-db-de.com

Keine Nachrüstanmerkung gefunden. (Parameter Nr. 1)

Ich möchte RSS-Code von einer URL mit Retrofit erhalten und wenn ich URL statisch in die Get-Annotation eingebe, ist alles in Ordnung, aber bei dynamischer URL bekomme ich einen Fehler.

Mein Interface-Service:

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

Und Aufruf der getRss-Methode:

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());
        }

Ich erhalte folgende Fehlermeldung:

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

Hinweis: Ich habe proguard.cfg unterhalb der Zeile hinzugefügt, aber es hat nicht funktioniert

-keep class retrofit.** { *; }
33
mk72

Ergänzung zu Destils Antwort

Stellen Sie sicher, dass die parameters, die Sie an die retrofit interface methods(i.e callbacks, headers, body ) übergeben, nur zu retrofit package gehören. z.B. Keine benutzerdefinierten Rückrufe, die Sie selbst wünschen.

35

Mein Problem war, dass ich die Annotation @POST hatte, aber die Annotation @Body für den Parameter vergaß.

150
David Vávra

Stellen Sie außerdem sicher, dass Sie @Query oder @Field für alle Parameter hinzufügen, je nachdem, ob Sie GET/POST ausgeben.

z.B:

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

Ich hatte die Annotation @Post, aber die Annotationen @Field und @FormUrlEncoded vergessen

6
Alberto M

Überprüfen Sie die von Ihnen verwendete Path-Klasse und stellen Sie sicher, dass das Paket retrofit2.http.Path anstelle von org.simpleframework.xml.Path..__ ist. Dies ist ein häufiger Fehler bei der Retrofit-Anmerkung.

2

Sie haben wahrscheinlich vergessen, den Adapter zuerst zu initialisieren, wie in der Retrofit-API erwähnt:

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

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

2
dominik4142

Mein Problem war, dass ich Kotlin-Coroutinen verwende und in der Retrofit-GET-Methode 'suspend' verwende. Entfernen Sie es einfach und alles funktioniert gut.

2
MrVasilev

In meinem Fall habe ich einfach vergessen, den Callback-Parameter für den Serviceabruf zu entfernen, wenn ich Retrofit 2 verwende.

1
Sfseyhan

Entfernen Sie aus retrofit interface alle Parameter, die nicht dazu gehören.

0
lucasddaniel