2016-06-13 3 views
1

私はうまくいけば、私を助けてdagger2する全く新しいです:)ダガー2エラー:@Injectコンストラクタなしまたは@から提供することはできませんアノテート提供方法

私は小さなデモを実施していますが、私はconguienteよ次のエラーが発生しました: エラー:(20、10)エラー:android.net.ConnectivityManagerは、@Injectビルダーなしで、または@または@ Produces提供アノテーション付きメソッドからは提供できません。 com.edwin.dagger1.MainActivity.connectivityManager [タイプの注射フィールド:android.net.ConnectivityManager connectivityManager]

public class Dagger2Application extends Application { 
 

 
    private SystemComponent systemComponent; 
 

 
    @Override 
 
    public void onCreate() { 
 
     super.onCreate(); 
 
     systemComponent = DaggerSystemComponent.builder() 
 
       .systemModule(new SystemModule(this)) 
 
       .build(); 
 
    } 
 

 
    public SystemComponent getSystemComponent() { 
 
     return systemComponent; 
 
    } 
 
}
@Module 
 
public class SystemModule { 
 
    private final Application application; 
 

 
    public SystemModule(Application application) { 
 
     this.application = application; 
 
    } 
 

 
    @Provides 
 
    @Singleton 
 
    public Context provideContext(){ 
 
     return application; 
 
@Singleton 
 
@Component(modules = SystemModule.class) 
 
public interface SystemComponent { 
 
    void inject(MainActivity activity); 
 
}

public class MainActivity extends AppCompatActivity { 
 

 
    @Inject 
 
    ConnectivityManager connectivityManager; 
 

 
    @Override 
 
    protected void onCreate(Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 
     setContentView(R.layout.activity_main); 
 

 
     Dagger2Application dagger2Application=(Dagger2Application)getApplication(); 
 
     dagger2Application.getSystemComponent().inject(this); 
 

 

 
     boolean activeNetworkMetered = connectivityManager.isActiveNetworkMetered(); 
 
     Log.d("Network is metered? " , activeNetworkMetered+""); 
 
    } 
 
}

答えて

0

問題がですConnectivityManagerクラスを挿入します。私はいくつかのコードを修正しました。見てください、これはあなた

public interface IConnectivityManager { 
    boolean getActiveNetworkMetered(); 
} 


public class IConnectivityManagerImpl implements IConnectivityManager { 

    private Context context; 

    public IConnectivityManagerImpl(Context context) { 
     this.context = context; 
    } 

    @Override 
    public boolean getActiveNetworkMetered() { 
     ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     return connectivityManager.isActiveNetworkMetered(); 
    } 
} 

にMainActivity.class

@Inject 
    IConnectivityManager connectivityManager; 
boolean activeNetworkMetered = connectivityManagers.getActiveNetworkMetered(); 
     Log.d("Network is metered? " , activeNetworkMetered+""); 

SystemModule.class

@Provides 
    @Singleton 
    public IConnectivityManager provideConnectivity(Context context){ 
     return new IConnectivityManagerImpl(context); 
    } 
を助けるウィル願っています
関連する問題