2016-06-13 37 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); 
    } 
相關問題