【发布时间】:2019-01-11 23:52:17
【问题描述】:
在我的项目中,我使用 Salut 库来使用 wi-fi direct。下面是类构造函数:
public Salut(SalutDataReceiver dataReceiver,
SalutServiceData salutServiceData,
SalutCallback deviceNotSupported) {
...
}
类 SalutDataReceiver 作为参数接受对活动的引用。他还接听电话。下面是类构造函数:
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);
}
}
但在编译时抛出异常:
Error:(25, 10) error: com.peak.salut.SalutDataReceiver 不能 在没有 @Inject 构造函数或从 @Provides-annotated 的情况下提供 方法。 com.peak.salut.SalutDataReceiver 被注入 com.test.modules.WifiCommunicationModule.provideSalut(dataReceiver) com.peak.salut.Salut 注入于 com.test.views.activities.MainActivity.salut com.test.views.activities.MainActivity 被注入 com.test.components.MainComponent.inject(活动)
更新
先生。 @Zayniddin Mamarasulov 建议您从 SalutDataReceiver 创建一个派生类,并将构造函数标记为 @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);
}
}
Error:(25, 10) error: android.app.Activity 不能没有 @Inject 构造函数或来自 @Provides 注释的方法。 android.app.Activity 被注入在 com.test.implementation.SalutDataReceiverExtend.(活动,...) com.test.implementation.SalutDataReceiverExtend 被注入 com.test.modules.WifiCommunicationModule.provideSalut(dataReceiver) com.peak.salut.Salut 注入于 com.test.views.activities.MainActivity.salut com.test.views.activities.MainActivity 被注入 com.test.components.MainComponent.inject(活动)
【问题讨论】:
标签: android exception dagger-2