Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

I am having the next problem using Retrofit 2 beta 2:

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

This is because I have one interface for the API of Retrofit like this:

public interface RetrofitBaseAPI {      @POST     Call<LoginResp> login(@Url String url, @Body LoginReq loginReq);      @POST     Call<String> logout(@Url String url, @Header("Cookie") String sid); } 

For example, one of them is this one:

public interface RetrofitWiserLinkAPI extends RetrofitBaseAPI {      @GET("/rs/DeviceIdentification")     Call<DeviceId> getDeviceIdentification(@Header("Cookie") String sid); } 

And then, I have three other interfaces, the three of them extends from this RetrofitBaseAPI interface.

When I try to call the retrofit.create(Class class) with the given interface, I always receive this error.

As far as I was reading, the only solution is to create three independents interfaces. Is it true? Anybody knows another solution?

I find a little bit weird that we need to duplicate code, but well, maybe there is a reason I don't understand.....

Thanks in advance!

Thanks,

EDIT: Same problem using the final Retrofit 2 release version. I guess it is a limitation from Retrofit....

like image 953
zapotec Avatar asked Dec 09 '15 14:12

zapotec


1 Answers

It's not possible to have a base Retrofit interface.

JakeWharton - the author of Retrofit:

Retrofit favors composition over inheritance. One interface per service.

So as you already found out, the only solution is to create three independents interfaces.

like image 128
naXa Avatar answered Oct 06 '22 18:10

naXa