Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果没有@Inject构造函数或@Provides注释方法,则无法提供Android Dagger 2.11_Android_Exception_Dagger 2 - Fatal编程技术网

如果没有@Inject构造函数或@Provides注释方法,则无法提供Android Dagger 2.11

如果没有@Inject构造函数或@Provides注释方法,则无法提供Android Dagger 2.11,android,exception,dagger-2,Android,Exception,Dagger 2,在我的项目中,我使用salt库直接使用wi-fi。下面是类构造函数: public Salut(SalutDataReceiver dataReceiver, SalutServiceData salutServiceData, SalutCallback deviceNotSupported) { ... } public SalutDataReceiver(Activity activity, SalutDataCallback da

在我的项目中,我使用salt库直接使用wi-fi。下面是类构造函数:

public Salut(SalutDataReceiver dataReceiver, 
             SalutServiceData salutServiceData, 
             SalutCallback deviceNotSupported) {
...
}
public SalutDataReceiver(Activity activity, SalutDataCallback dataCallback) {
}
类DataReceiver作为参数引用活动。他还回电话。下面是类构造函数:

public Salut(SalutDataReceiver dataReceiver, 
             SalutServiceData salutServiceData, 
             SalutCallback deviceNotSupported) {
...
}
public SalutDataReceiver(Activity activity, SalutDataCallback dataCallback) {
}
由于有一个与活动的刚性链接,我假设这个对象应该从外部转移。以下是模块和组件的类别:

@Module
public class WifiCommunicationModule {

    public WifiCommunicationModule() {

    }

    @Provides
    @Singleton
    public Salut provideSalut(SalutDataReceiver dataReceiver) {
        SalutServiceData serviceData = new SalutServiceData("testService", 50489, "test");
        return new Salut(dataReceiver, serviceData, null);
    }
}


 @Singleton
 @Component(modules = {
            AppModule.class,
            WifiCommunicationModule.class
    })
    public interface MainComponent {
        void inject(MainActivity activity);
    }


public class MainActivity extends AppCompatActivity {

    @Inject
    Salut salut;


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


    }
}
但在编译时引发异常:

错误:(25,10)错误:com.peak.sallt.sallDataReceiver不能为 不使用@Inject构造函数或从@Provides注释 方法。com.peak.sallt.sallDataReceiver在 com.test.modules.WifiCommunicationModule.provideSalut(数据接收器) com.peak.sallt.sallt在 com.test.views.activities.MainActivity.salt com.test.views.activities.main活动在 com.test.components.MainComponent.inject(活动)

更新

@Zayniddin Mamarasulov先生建议您从sallDataReceiver创建一个派生类,并将构造函数标记为@Inject。但不幸的是,这也不起作用

public class SalutDataReceiverExtension extends SalutDataReceiver {

    @Inject
    public SalutDataReceiverExtension(Activity activity, SalutDataCallback dataCallback) {
        super(activity, dataCallback);
    }
}


@Module
public class WifiCommunicationModule {

    public WifiCommunicationModule() {

    }

    @Provides
    @Singleton
    public Salut provideSalut(SalutDataReceiverExtension dataReceiver) {
        SalutServiceData serviceData = new SalutServiceData("testService", 50489, "test");
        return new Salut(dataReceiver, serviceData, null);
    }
}
错误:(25,10)错误:如果没有 @Inject构造函数或来自@Inject的构造函数提供了带注释的方法。 android.app.Activity在 com.test.implementation.DataReceiverExtend。(活动,…) com.test.implementation.sallDataReceiverExtend在 com.test.modules.WifiCommunicationModule.provideSalut(数据接收器) com.peak.sallt.sallt在 com.test.views.activities.MainActivity.salt com.test.views.activities.main活动在 com.test.components.MainComponent.inject(活动)


向DataReceiver的构造函数添加@Inject注释,如下所示:

@Inject
public SalutDataReceiver(Activity activity, SalutDataCallback dataCallback) {
}

这是一个外部库,我不能这样做。您是否尝试重写其构造函数?尝试扩展DataReceiver类并将@Inject注释添加到您自己的类的构造函数中。我不能确切地说它有效,但它可能会帮助你