2016-02-16 8 views
6

私はDaggerの初心者です。私が作成 現在のサンプルプロジェクト、いくつかのスニップコード:AppCompatActivityのDagger 2注入エラー

MyComponent.java

@PerActivity 
@Component(modules = MyModule.class) 
public interface MyComponent { 
    void inject(TutorialActivity activity); 
} 

MyModule.java

@Module 
public class MyModule { 
    @Provides 
    Position providePosition() { 
     return new Position(); 
    } 
} 

PerActivity.java

@Scope 
@Retention(RUNTIME) 
public @interface PerActivity {} 

TutorialActivity.java

public class TutorialActivity extends AppCompatActivity{} 

コンパイルプロジェクトは、私はエラーを取得する:私のようにTutorialActivityを変更した場合

Error:Execution failed for task ':app:compileDebugJavaWithJavac'. 
> java.lang.IllegalArgumentException: expected one element but was: <android.support.v4.app.FragmentActivity, android.support.v4.app.TaskStackBuilder.SupportParentable> 

だから:

public class TutorialActivity extends Activity{} 

or even 

public class TutorialActivity{} // Without extends 

そして、それが正常に動作します(私はDagger2によって生成されたクラスを参照することができます)。

助けてください!

ありがとうございました。

UPDATE

マイプロジェクト構造:

  • commonモジュール。
  • appモジュール。 (アプリケーションモジュールは、gradleに依存する共通モジュールを使用します)。両方のbuild.gradle(共通アプリモジュール)において

Iを添加:build.gradleで

apt "com.google.dagger:dagger-compiler:${daggerVersion}" 
compile "com.google.dagger:dagger:${daggerVersion}" 

を共通モジュールで:I 2を有する場合

provide "org.glassfish:javax.annotation:${javaxAnnotationVersion}" 

エラーが発生しモジュール。 (モジュールappcommonに依存する)。 コンポーネント/モジュールをモジュールcommonに移動すると動作します。 しかし、それをappモジュールに移動すると、 - >コンパイル時にエラーが発生します。

答えて

0

お返事ありがとうございます。

両方のモジュールをもう一度確認した後。 私は私が唯一の追加が見つかりました:

provide "org.glassfish:javax.annotation:${javaxAnnotationVersion}" 

モジュールcommonでは。

私は両方のモジュールを提供することを追加した後、その後の成功をコンパイルします。(ダガー生成されたクラス。)

+0

私はあなたの問題を解決しました! – plast

+0

@plastしかし私はまだなぜか分からない:TutorialActivityはアクティビティを拡張する =>働いている。しかし、コンパイル時にAppCompatActivity - > Errorから拡張されます – quangson91

+0

サポートライブラリを正しくインポートしていますか? – plast

2

私は私はあなたが任意の依存関係を要求して表示されていないので、あなたの問題は、ダガーに問題があることはよく分かりませんあなたのAndroidコンポーネント。

これにもかかわらず、あなたのbuild.gradleには、勾留注射注釈を使用する必要があります。

provided 'javax.annotation:jsr250-api:1.0' 
+0

私のプロジェクトで@plash javax.annotationを追加しました。 – quangson91

+0

@plash私の答えを見てください。私は問題が両方のモジュールのjavax.annotationを提供する必要があることを発見した。 – quangson91

関連する問題