Für die Dinge einfach zu machen, nehme ich an EmailValidator von Apache Validatoren in meine Tätigkeit injizieren wollen:Dagger2 - null statt injiziert Objekt
public class MainActivity extends FragmentActivity {
@Inject
EmailValidator emailValidator;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
Ich habe eine MainModule Klasse:
@Module
public class MainModule {
@Provides
public EmailValidator providesEmailValidator() {
return EmailValidator.getInstance();
}
}
und MainComponent Schnittstelle:
@Singleton
@Component(modules = MainModule.class)
public interface MainComponent {
EmailValidator getEmailValidator();
}
Wenn ich versuche, meinen Validator in Aktivität zu verwenden, bekomme ich eine Nullpoi nter Ausnahme:
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean org.apache.commons.validator.routines.EmailValidator.isValid(java.lang.String)' on a null object reference
Offensichtlich fehlt mir etwas. Ich weiß, dass Dolch eine Komponentenimplementierung für mich erstellt. Soll ich es benutzen? Wie?
Wenn ich in meinem onCreate Verfahren folgendes tun:
emailValidator = Dagger_MainComponent.create().getEmailValidator();
dann funktioniert alles einwandfrei.
Aber ich möchte in der Lage sein, @Inject Annotation überall (wahrscheinlich auf Setter/Konstruktor anstelle eines Feldes) stattdessen zu verwenden.
Was fehlt mir?
Ich habe etwas ähnliches mit dagger1 und es hat funktioniert. Natürlich musste ich ObjecGraph.inject(this)
in Aktivität aufrufen. Was ist das Äquivalent von Dolch2?
EDIT:
Ok, so habe ich eine Lösung gefunden. Wenn jemand schon einmal ein solches Problem haben, gibt es einige Schnipsel:
1) Ich habe eine Anwendung Klasse erstellt haben:
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) In AndroidManifest.xml:
<application
android:name=".EmailSenderApplication"
...
3) Und schließlich, in der Aktivitätsklasse, wo ich einige Komponenten diese zwei hässlichen Linien injizieren möchte:
Ich kann 'inject' nicht auf meiner Komponente aufrufen. Auch die Dagger_MainComponent-Syntax scheint sich nur in DaggerMainComponent geändert zu haben. –