2015-12-09 18 views
8

Tôi gặp vấn đề tiếp theo sử dụng Retrofit 2 beta 2:giao diện API không phải mở rộng giao diện khác Retrofit 2

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

Đây là bởi vì tôi có một giao diện cho các API của Retrofit như thế này:

public interface RetrofitBaseAPI { 

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

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

Ví dụ, một trong số họ là này một:

public interface RetrofitWiserLinkAPI extends RetrofitBaseAPI { 

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

Và sau đó, tôi có ba giao diện khác, ba của m mở rộng từ giao diện RetrofitBaseAPI này.

Khi tôi cố gắng gọi retrofit.create (Class class) với giao diện đã cho, tôi luôn nhận được lỗi này.

Theo như tôi đã đọc, giải pháp duy nhất là tạo ra ba giao diện độc lập. Có đúng không? Có ai biết giải pháp khác không?

tôi tìm thấy một chút lạ mà chúng ta cần phải lặp mã, nhưng tốt, có lẽ có một lý do tôi không hiểu .....

Cảm ơn trước!

Cảm ơn,

CHỈNH SỬA: Cùng một vấn đề khi sử dụng phiên bản phát hành trang bị chính thức 2. Tôi đoán đó là giới hạn của việc trang bị thêm ...

+2

không thể thực hiện được. Bạn có thể đọc thêm [tại đây] (https://github.com/square/retrofit/pull/676) – Blackbelt

+0

Cảm ơn rất nhiều câu trả lời của bạn! Và hạn chế là cho bất kỳ lý do cụ thể của hiệu suất, desing, vv ??? Hoặc là nó chỉ để giảm các trường hợp sử dụng có thể? – zapotec

+0

@zapotec "Bổ sung thành phần ưu đãi. PR này bổ sung thêm quyền thừa kế." đã nói một người nào đó ... –

Trả lời

10

Không thể có giao diện Retrofit cơ sở.

JakeWharton:

Retrofit ủng hộ thành phần trên thừa kế. Một giao diện cho mỗi dịch vụ.

Vì vậy, như bạn đã biết, giải pháp duy nhất là tạo ba giao diện độc lập.

+4

Thật đáng tiếc: - / – Matthias

Các vấn đề liên quan