2015-12-09 16 views
8

sto avendo il problema successivo utilizzando Retrofit 2 beta 2:interfacce API non devono estendere altre interfacce Retrofit 2

java.lang.IllegalArgumentException: API interfaces must not extend other interfaces. 

Questo è perché ho una sola interfaccia per l'API di Retrofit in questo modo:

public interface RetrofitBaseAPI { 

    @POST 
    Call<LoginResp> login(@Url String url, @Body LoginReq loginReq); 

    @POST 
    Call<String> logout(@Url String url, @Header("Cookie") String sid); 
} 

Per esempio, uno di loro è questa:

public interface RetrofitWiserLinkAPI extends RetrofitBaseAPI { 

    @GET("/rs/DeviceIdentification") 
    Call<DeviceId> getDeviceIdentification(@Header("Cookie") String sid); 
} 

E poi, ho altri tre interfacce, le tre del m si estende da questa interfaccia RetrofitBaseAPI.

Quando provo a chiamare retrofit.create (classe Class) con l'interfaccia specificata, ricevo sempre questo errore.

Per quanto ho letto, l'unica soluzione è creare tre interfacce indipendenti. È vero? Qualcuno conosce un'altra soluzione?

trovo un po 'strano che abbiamo bisogno di duplicare il codice, ma bene, forse c'è una ragione che non capisco .....

Grazie in anticipo!

Grazie,

EDIT: Stesso problema utilizzando la versione finale Retrofit 2 rilascio. Immagino che si tratti di una limitazione da Retrofit ....

+2

no, non è possibile. Puoi leggere di più [qui] (https://github.com/square/retrofit/pull/676) – Blackbelt

+0

Grazie mille per la tua risposta! E la restrizione è per ogni particolare motivo di prestazioni, desing, ecc ??? O è solo per ridurre i possibili casi d'uso? – zapotec

+0

@zapotec "Il retrofit favorisce la composizione e questo PR aggiunge ereditarietà". ha detto qualcuno ... –

risposta

10

Non è possibile avere un'interfaccia di retrofit di base.

JakeWharton:

Retrofit favorisce la composizione per l'eredità. Una interfaccia per servizio.

Così come hai già scoperto, l'unica soluzione è creare tre interfacce indipendenti.

+4

Che peccato: - / – Matthias