2016-02-16 23 views
6

Tôi là người mới cho Dagger. hiện tại tôi có thể tạo dự án mẫu một số mã snip:Lỗi tiêm Dagger 2 trong AppCompatActivity

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{} 

Khi dự án biên dịch tôi nhận được lỗi:

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> 

Vì vậy, nếu tôi thay đổi TutorialActivity như:.

public class TutorialActivity extends Activity{} 

or even 

public class TutorialActivity{} // Without extends 

Sau đó, nó sẽ hoạt động bình thường (tôi có thể thấy lớp được tạo ra bởi Dagger2).

Vui lòng trợ giúp!

Cảm ơn.

CẬP NHẬT

cấu trúc dự án của tôi:

  • common module.
  • app mô-đun. (mô-đun ứng dụng sẽ sử dụng mô-đun chung như phụ thuộc vào gradle).

Trong cả hai build.gradle (mô-đun phổ biến và ứng dụng) Tôi nói thêm:

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

Trong build.gradle tại mô-đun chung:

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

lỗi chỉ xảy ra nếu tôi có 2 mô-đun. (mô-đun app phụ thuộc vào common). Nếu tôi di chuyển Component/Module của mình sang module common -> Nó hoạt động. Nhưng khi tôi chuyển sang mô-đun app -> Lỗi khi biên dịch.

Trả lời

0

Thanks @plash cho câu trả lời của bạn.

Sau khi tôi kiểm tra lại cho cả hai mô-đun. Tôi thấy tôi chỉ thêm:

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

trong mô-đun common.

Sau khi tôi nói thêm rằng cung cấp cho cả hai mô-đun sau đó biên dịch thành công. (Lớp Dagger tạo ra.)

+0

Vui vì tôi đã giải quyết được vấn đề của bạn! – plast

+0

@plast Nhưng tôi vẫn không biết tại sao: TutorialActivity mở rộng Hoạt động => đang hoạt động; Nhưng mở rộng từ AppCompatActivity -> Error khi biên dịch – quangson91

+0

Bạn có nhập chính xác thư viện hỗ trợ không? – plast

2

Tôi không chắc chắn rằng vấn đề của bạn là một vấn đề với Dagger vì tôi không thấy bạn yêu cầu bất kỳ phụ thuộc vào các thành phần Android của bạn.

Tuy nhiên, bạn cần điều này trong số build.gradle để sử dụng chú thích tiêm phụ thuộc.

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

@plash trong dự án của tôi, tôi đã thêm javax.annotation. – quangson91

+0

@plash xem câu trả lời của tôi. Tôi tìm thấy vấn đề là nên được thêm vào cung cấp javax.annotation cho cả hai mô-đun. – quangson91

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