2016-06-13 42 views
1

我完全陌生的dagger2希望能帮助我:)匕首2错误:不能没有@Inject构造函数或从@提供提供注解方法

我实现一个小的演示,但我conguiente的以下错误: 错误:(20,10)错误:无法使用@Inject构建器或者从@或@ Produces提供 - 带注释的方法提供android.net.ConnectivityManager。 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); 
    } 
相关问题