Ich versuche gerade, mein Android-Projekt mit ORMLite einzurichten. Ich benutze Roboguice für DI. Jetzt ist meine Frage, ob hier jemand helfen kann, diese zusammenzuarbeiten.
Ich habe meine Helferklasse eingerichtet, die OrmLiteSqliteOpenHelper
erweitert. Jetzt frage ich mich, wie man die korrekte DAO-Klasse injiziert.
Eine allgemeine Best Practice wäre fantastisch. Da die Verwendung von OrmLiteBaseActivity
nicht wirklich zutreffen sollte, sollte dies von Roboguice gehandhabt werden. Die Frage ist nur: Wie?
Ich würde jede Hilfe, Ihre Erfahrung, Best Practice usw. sehr schätzen.
Wenn Sie von OrmLiteBaseActivity aus erweitern, können Sie RoboActivity . Das ist in Ordnung, rufen Sie einfach folgendes an (unter der Annahme von roboguice 1.1), um eine Injektion für Ihre Nicht-Roboaktivität durchzuführen:
%Vor%Sobald Sie das haben, können Sie Ihre Dao-Objekte injizieren.
Um Ihre DAOs zu injizieren, sollten Sie dem Muster folgen, das von SystemServiceProvider (class und Bindungen ). Implementieren Sie einen DaoProvider wie folgt:
%Vor%Liefern Sie die Bindungen. Für jeden DAO-Typ, den Sie injizieren möchten, müssen Sie einen durchführen:
%Vor%Dann können Sie es in Ihre Aktivität oder anderswo injizieren:
%Vor%Ich hatte das gleiche Problem und habe schließlich einen OrmLiteActivityListener erstellt, um meine RoboActivity anzuhören und die von ihr ausgelösten Ereignisse zu behandeln.
%Vor%Die RoboOrmLiteActivityListener-Klasse wurde von der OrmLiteActivityBase-Klasse abgeleitet. Ich habe seine Vererbung entfernt und es stattdessen zuhören lassen.
%Vor%Dann habe ich einen DatabaseHelperProvider, der meinen Helper bereitstellt, der sich von OrmLiteSqliteOpenHelper erstreckt. Dieser Provider führt die Injektion auf meinem Helfer manuell durch, nachdem er sie von OpenHelperManager abgerufen hat.
%Vor%Ich habe auch eine Schnittstelle namens IOrmLiteSqliteOpenHelper, die aus OrmLiteSqliteOpenHelper extrahierte Elemente enthält. Dann, wenn ich meine Schnittstelle (IDatabaseHelper) für meinen Helfer baue, der von OrmLiteSqliteOpenHelper abgeleitet wird, kann ich von IOrmLiteSqliteOpenHelper verlängern.
Dann, um in meinem Modul zu binden, habe ich
%Vor%und
%Vor%Dann hat meine Aktivität alles für RoboGuice und Ormlite komplett in der Basisklasse und sieht so aus:
%Vor%Dies ist keine Best Practice, nur die Lösung, die ich mir ausgedacht habe, das funktioniert.
Bitte hinterlassen Sie Hinweise für Verbesserungen.
Ich verwende hier eine UserLocation-Entity als Beispiel Um SqliteOpenHelper und Dao als Singletons zu binden, fügte ich dies der Modulkonfiguration hinzu:
%Vor%Der OrmLiteSqliteOpenHelperProvider sieht so aus:
%Vor%Der DaoUserLocationProvider sieht folgendermaßen aus:
%Vor%Jetzt kann ich den Dao liek einfach einspritzen:
%Vor%Auf diese Weise kann ich die Roboguice-Aktivität weiter verwenden und der SqliteOpenHelper wird von Roboguice als Singleton gehalten.
Aber die Frage nach dem Zerstören / Freigeben bleibt bestehen. Ich bin versucht, einfach den Inhalt der OrmLiteBaseActivity zu kopieren und RoboActivity zu erweitern. Irgendwelche Meinungen?
Sie können diesem Tuto folgen.
Ich habe eine spezielle Softwarearchitektur verwendet, um Mehrfachvererbung zu vermeiden Ich sage am Anfang von Tuto:
Die Klasse, die ormlite verwendet, erweitert
OrmliteActivity. Aber wenn Sie GreenDroid verwenden
, Aktivitäten sollten GDActivity erweitern.
Leider unterstützt Java nicht mehrere
Vererbung, dh eine JAVA-Klasse kann nur einen
erweiternsuperclass maximum.