, benim faaliyeti içine apache doğrulayıcıları gelen EmailValidator enjekte etmek istediğinizi varsayalım arabirim:Dagger2 boş yerine enjekte ait her şeyi basitleştirme için nesne
@Singleton
@Component(modules = MainModule.class)
public interface MainComponent {
EmailValidator getEmailValidator();
}
Değerleme aracımı etkinlikte kullanmaya çalışırken, bir nullpoi alıyorum İstisna:
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean org.apache.commons.validator.routines.EmailValidator.isValid(java.lang.String)' on a null object reference
Açıkçası bir şey kaçırıyorum. Ben hançerin benim için bileşen uygulaması yarattığını biliyorum. Kullanmalı mıyım? Nasıl? Benim onCreate yönteminde aşağıdaki yaparsanız
:
emailValidator = Dagger_MainComponent.create().getEmailValidator();
sonra her şey gayet iyi çalışıyor.
Ama bunun yerine @Inject (herhangi bir alan yerine setter/yapıcı yerine) ek açıklama eklemek mümkün.
Neyi eksik?
dagger1 ile benzer bir şey yaptım ve işe yaradı. Tabii ki aktivitede ObjecGraph.inject(this)
'u aramam gerekiyordu. Davis2 eşdeğeri nedir?
DÜZENLEME:
Tamam, bu yüzden bir çözüm bulduk. AndroidManifest.xml yılında
public class EmailSenderApplication extends Application {
private MainComponent component;
@Override
public void onCreate() {
super.onCreate();
component = Dagger_MainComponent
.create();
component.inject(this);
}
public MainComponent component() {
return component;
}
}
2): Ben bir uygulama sınıfı oluşturduk
1): Hiç kimse böyle bir sorun olacaksa, bazı parçacıkları vardır
<application
android:name=".EmailSenderApplication"
...
3 Son olarak, bu iki çirkin cehennem çizgisi gibi bazı bileşenleri enjekte etmek istediğim aktivite sınıfında:
component = ((EmailSenderApplication) getApplication()).component();
component.inject(this);
Bileşenimde 'inject 'diyemiyorum. Ayrıca Dagger_MainComponent sözdizimi sadece DaggerMainComponent olarak değişmiş gibi görünüyor. –