Comment faire un Android singleton et personnalisée classe de données avec la base de données?
Je veux utiliser un pattern singleton de tenir une base de données et d'autres données/méthodes pour mon application Android.
Je me rends compte il y a de nombreuses raisons contre des singletons, mais pour ce cas, j'aimerais l'utiliser.
J'ai sous-classés UIApplication et fait une classe de données à l'intérieur il appelle MyAppData.
MyAppData doit avoir accès à une base de données SQLite.
Quand j'ai créer le databse, j'ai besoin de passer un contexte. J'ai pu passer le contexte de l'application, mais il va se rapportent pas directement à MyAppData.
Je ne sais pas si ce il causer des problèmes avec mon code.
Donc, ma pensée est d'avoir MyAppdata étendre android.contenu.ContextWrapper. Je ne pense pas que je devrais prolonger l'Activité parce que c'est vraiment pas une activité, de son une classe de données avec des méthodes pour accéder à la base de données.
Je me demande si je prolonge ContextWrapper aura-t-il quelque chose de profond dans le code, je suis absent qui va provoquer de gros problèmes en bas de la route (les fuites de mémoire, etc).
Cela peut ne pas être l'approche idéale pour cela (et j'ai examiné d'autres options), mais mon but est de:
Ont une classe singleton dans UIApplication qui peut encapsuler la base de données et être récupérées facilement à partir de n'importe quelle activité dans mon application.
Merci d'avance pour vos suggestions/avertissements/conseils.
Vous devez vous connecter pour publier un commentaire.
Sous-classe
android.database.sqlite.SQLiteOpenHelper
etandroid.app.Application
(ce dernier étant déclarée dansAndroidManifest.xml
).Maintenant,
Alors helper classes DAO qui va effectuer instertions/mises à jour/etc.
C'est ce que j'utilise dans toutes mes apps.
J'ai utilisé cette approche:
Créer une classe responsable de la gestion de la db, nous allons l'appeler
DBUtil
. Cette classe permettra de prolongerandroid.database.sqlite.SQLiteOpenHelper
. Vous pouvez passer une référence au contexte de l'application dans le constructeur de cette classe. Cette classe contient des méthodes pour la création de la db, l'ajout, le retrait et la récupération des objets.Créer une autre classe, appelons-la
AppCore
, créer une instance statique de laDBUtil
et statiqueinit()
méthode qui accepte unApplicationContext
objetPuis dans le onCreate() la méthode de notre principale de votre application
Activity
, initialiser leAppCore
classe.Donc, ce n'est pas vraiment un Singleton. Au lieu de cela, le DBUtil instance est maintenue comme une propriété statique, mais toujours accessible tout au long de votre application, comme ceci:
Aussi, j'ai trouvé ce tutoriel très utile lors de la mise en route de ce sujet: http://developer.android.com/guide/tutorials/notepad/index.html