Zugriff auf Instanz der DatanBaseHelper über mehrere Aktivities

  • 10 Antworten
  • Letztes Antwortdatum
F

Ferro79de

Neues Mitglied
0
Hallo,
ich möchte gerne den Zugriff auf eine Datenbank über mehrere Aktivities hinweg haben. Leider bekomme ich dieses nicht hin.

Habe die Datenbank wie hier beschrieben eingebunden
Android: How to use own sqlite database | M Moniruzzaman's Blog, dies funktioniert auch auf der ersten Aktivity. Jetzt möchte ich die Connection in der nächsten Aktivity weiter benutzen - wie geht das?

Grüße
 
Den databasehelper in der neuen activity erzeugen wie in der ersten. Oder du suchst dir ein weg das databasehelper objekt außerhalb der aktivitys global zu erzeugen. Also, das ist die trockene theorie
 
Würde mich auch interessieren was besser ist in jeder activity nen neues dB Objekt oder ein globales ...

Ich mach es immer so das ich nur eine Connection aufbaue wenn ich sie brauche, mach meine Aktion und schließe dann die Connection ...


Sent from my iPhone using Tapatalk
 
Das ist jetzt nur meine meinung. Connection beenden destroyed ja nicht direkt ein objekt. Ich würde nach jeder abfrage die connection schliesen aber das objekt vor dem garbagecolloector retten und nicht gleich platt machen. Wenn ich doch weis das ich weitere abfragen habe, würde ich versuchen das objekt zu behalten.

Der ursprüngliche Beitrag von 01:21 Uhr wurde um 01:25 Uhr ergänzt:

Also bei datenbank abfragen über mehrer views global und bei nur einer activity direkt ein database helper local. Meine meinung halt.

Der ursprüngliche Beitrag von 01:25 Uhr wurde um 01:33 Uhr ergänzt:

Für den tricky fall das ich in einer aktivity daten von mehreren tabellen haben will brauch ich nicht mehrere databasehelper ... Ich muss nur sqlite bzw mysql befehle wie "inner" kennen. Wo meine meinung nicht greift ist wenn man wirklich auf mehrere datenbanken zugreifen möchte.

Der ursprüngliche Beitrag von 01:33 Uhr wurde um 01:46 Uhr ergänzt:

Jetzt wo ich dich gehört habe ;) , gehe ich lieber mal auf ein paar mehr fälle ein. War toll mit dir Madlip
 
mehrere databeasehelper brauch man nicht, da hast du Recht.

Ich hab gerade mal nach geschaut, in der API steht folgendes zur Methode close():

Releases a reference to the object, closing the object if the last reference was released.

ich bin mir unsicher wie man den zweiten Teil (closing the object ...) verstehen soll, ob die damit sagen das es frei gegeben wird, sprich das es dem GarbageCollector zum Opfer fällt?

Ich hatte jetzt auch noch ein bisschen gegoogelt nach dem Motto "Best Way to handel" aber da ist sich wohl niemand so recht sicher was der "best way" ist.
Ich denke, beim onCreate (bei bedarf auch in der onResume) ein db Objekt erzeugen und in der onDestroy close, dass man damit ganz gut fahren sollte.

Wäre halt interessant was die Anderen, die damit schon mehr Erfahrung gesammelt haben, sagen.

PS: Hoffentlich ist das halbwegs verständlich was ich hier jetzt geschrieben hab ...
 
Wenn ich mir das Beispiel angucke aus dem Ausgangspost, versteh ich das Problem nicht.

Die Helperklasse hat doch eine getInstance methode.
MyDataBaseHelper.getInstance(context) aufrufen und du erhälst das gleiche Objekt zurück wie in der anderen Acitivty.
 
Hallo und Danke für die Tips!
Habe das Problem erst mal so gelöst, dass alle nachkommenden Aktivities von der MainAktivity erben....

Code:
public class SecondActivity extends MainActivity

Eventuell nicht die beste Lösung...werd mir eure tips mal ansehen...
 
Und wie hilft dir das erben weiter?
Wenn du in der MainActivity irgendwas als private variable hast kannst du darauf ja auch aus der SecondAcitivity nicht zugreifen.

Wie hast du das denn im moment gelöst mit ver Vererbung
 
amfa schrieb:
Und wie hilft dir das erben weiter?
Wenn du in der MainActivity irgendwas als private variable hast kannst du darauf ja auch aus der SecondAcitivity nicht zugreifen.

Wie hast du das denn im moment gelöst mit ver Vererbung

Entweder als "public" oder "protected" :)

Madlip schrieb:
mehrere databeasehelper brauch man nicht, da hast du Recht.

Ich hab gerade mal nach geschaut, in der API steht folgendes zur Methode close():



ich bin mir unsicher wie man den zweiten Teil (closing the object ...) verstehen soll, ob die damit sagen das es frei gegeben wird, sprich das es dem GarbageCollector zum Opfer fällt?

Ich hatte jetzt auch noch ein bisschen gegoogelt nach dem Motto "Best Way to handel" aber da ist sich wohl niemand so recht sicher was der "best way" ist.
Ich denke, beim onCreate (bei bedarf auch in der onResume) ein db Objekt erzeugen und in der onDestroy close, dass man damit ganz gut fahren sollte.

Bin ich auch für. Mach ich auch so. :)

Wäre halt interessant was die Anderen, die damit schon mehr Erfahrung gesammelt haben, sagen.

PS: Hoffentlich ist das halbwegs verständlich was ich hier jetzt geschrieben hab ...
 
Zuletzt bearbeitet:
naja public Variablen sind aber Teufelszeug :D

Im Ernst ich versteh das Problem immer noch nicht.
Zumindest nicht mit dem Beispiel von oben.
Man kann von dem DBHelfer ja nicht mal ein eigenes Objekt einfach so erzeugen.
Da die Konstruktoren doch alle private sind.
Somit kann ich ja nur über getInstance an das Objekt kommen und das bleibt immer das gleiche bei jedem Aufruf.

Ich könnte also sogar an jeder Stelle (auch in jeder Activity) wo ich auf die Datenbank zugreifen will einfach beispielsweise:
MyDataBaseHelper.getInstance(context).search("text")
nutzen und muss mir nicht mal das MyDataBaseHelper Objekt merken.
 

Ähnliche Themen

D
Antworten
8
Aufrufe
807
jogimuc
J
Zurück
Oben Unten