2014-10-17 46 views
0

我是新來的匕首,我正在嘗試使用android的小應用程序。 我想通過http和https對兩臺服務器(dev和prod)使用Retrofit進行REST請求。所以,我在調試味模塊,其中:匕首錯誤:java.lang.String的重複綁定

@dagger.Module(overrides = true, library = true, complete = false) 
public class DebugApiModule { 
    private static final String SRV = "dev.mysrv.com"; 
    private static final String HTTP = "http://"; 
    private static final String HTTPS = "https://"; 

    public static final String API_URL = HTTP + SRV; 
    public static final String API_URL_SECURE = HTTPS + SRV; 

    @Provides @Singleton @Api String provideApi() { return API_URL; } 
    @Provides @Singleton @ApiSecure String provideApiSecure() { return API_URL_SECURE; } 
} 

這裏我使用標註以不同的兩個字符串,但我得到的錯誤:

Error:(23, 50) error: Duplicate bindings for java.lang.String in override module(s) - cannot override an override: 
com.myapp.common.api.DebugApiModule.provideApi() 
com.myapp.common.api.DebugApiModule.provideApiSecure() 

什麼不對的代碼?

回答

0

@Api@ApiSecure註解都需要用javax.inject.Qualifier加註釋,以便Dagger將它們用作區分因子。

@Qualifier 
@Retention(RUNTIME) 
public @interface Api { 
} 
+0

謝謝傑克,我錯過了'@ Qualifier'註釋。 我正在使用您的u2020應用程序作爲參考,還有'@ ClientId'註釋也沒有'@ Qualifier'註釋。那麼爲什麼它在你的應用程序中工作? – 2014-10-17 16:29:54

+0

嘿,好問題!我得看一看。 – 2014-10-17 18:49:03

+0

哦,對不起,這不是你的應用程序,它是你的應用程序的端口,由檸檬實驗室,他們添加了NavigationDrawer,Mortar和Flow。 ([github上](https://github.com/lemonlabs/u2020-mortar/blob/ab9b1b06b37bd9c67dcdd614548fa1899b62f8f3/app/src/main/java/co/lemonlabs/mortar/example/data/api/ClientId.java)) 在你的應用程序中有'@ Qualifier'([github](https://github.com/JakeWharton/u2020/blob/d5dc1aff3eb23ab185bb191f609b6f6187dcfaaa/src/main/java/com/jakewharton/u2020/data/api/ClientId.java) ) 所以這是檸檬問題 – 2014-10-20 08:32:29