1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

sqlite Datenbank-Aufruf

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von online-dan, 15.07.2010.

  1. online-dan, 15.07.2010 #1
    online-dan

    online-dan Threadstarter Neuer Benutzer

    Beiträge:
    3
    Erhaltene Danke:
    0
    Registriert seit:
    15.07.2010
    Hallo zusammen,

    ich kenne mich hinsichtlich der App-Architektur noch nicht so gut aus. Aber zur Übersichtlichkeit würde ich gerne alle meine Datenbank-Operationen und -berechnungen in eine Extra-Klasse auslagern. Sobald ein Objekt dieser Klasse erzeugt wird, soll im Konstruktor eine Datenbank geöffnet werden.

    Mit folgendem Minimal-Beispiel stürzt meine App leider noch ab und ich erhalte die Meldung

    Darum meine beiden Fragen:
    a) Was haltet ihr von diesem Vorgehen/dieser Architektur? Ist das realisierbar?
    b) Warum stürzt das Minimalbeispiel ab?

    Meinen Quellcode poste ich Euch mal hier drunter. Für Eure Hilfe bedanke ich mich schon jetzt mal sehr herzlich.

    Gruß, Dan

    Code:
    package de.arbeit;
    
    import android.app.Activity;
    import android.os.Bundle;
    
    public class test extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            Operationen x = new Operationen();
        }
    }
    Code:
    package de.arbeit;
    
    import android.app.Activity;
    import android.database.sqlite.SQLiteDatabase;
    
    public class Operationen extends Activity {
        /***
         * globale Variablen
         */
        SQLiteDatabase v_datenbank;
        /**
         * Konstruktor
         * */
        public Operationen() 
        {
            //try {
            v_datenbank = this.openOrCreateDatabase("datenbank", MODE_PRIVATE, null);
            //} catch(Exception e){}
    
        }
    
    }
    
     
  2. online-dan, 15.07.2010 #2
    online-dan

    online-dan Threadstarter Neuer Benutzer

    Beiträge:
    3
    Erhaltene Danke:
    0
    Registriert seit:
    15.07.2010
    Habs jetzt so gelöst, dass ich von der aufrufenden Klasse (test.java) eine SQLite Datenbank an die Klasse (Operationen.java) beim Erzeugen mitübergebe. Das funktioniert einwandfrei. Komisch - aber gut ;-)

    Gruß, Dan
     
  3. the_alien, 15.07.2010 #3
    the_alien

    the_alien Android-Lexikon

    Beiträge:
    1,559
    Erhaltene Danke:
    184
    Registriert seit:
    04.05.2009
    Macht Operationen was an der GUI? Activity ist quasi ein Fenster. Und das kriegt von Android nen Context verpasst wenn es per startActivity gestartet wird, darum geht openOrCreateDatabase nicht.
    1. Wenn das keine GUI Klasse ist nimm Activity da raus.
    2. Wenn es eine GUI Klasse ist, nimm die Datenbankzugriffe da raus!
     
  4. online-dan, 16.07.2010 #4
    online-dan

    online-dan Threadstarter Neuer Benutzer

    Beiträge:
    3
    Erhaltene Danke:
    0
    Registriert seit:
    15.07.2010
    Danke.
    Genau, die Klasse Operationen.java habe ich als reine Hilfs- und Berechnungsklasse vorgesehen. Sie soll einfach die Datenbankzugriffe für die GUI-Klassen durchführen und nur die berechneten Werte zurückliefern. Insofern werde ich einfach die Activity rausnehmen.

    Muss ich dann trotzdem immer die Datenbank von der aufrufenden Klasse (test.java) mit übergeben? Oder kann ich direkt im Konstruktor von Operationen.java eine DB öffnen?

    Gruß, Daniel
     
  5. the_alien, 16.07.2010 #5
    the_alien

    the_alien Android-Lexikon

    Beiträge:
    1,559
    Erhaltene Danke:
    184
    Registriert seit:
    04.05.2009
    Du kannst die Datenbank übergeben oder einen Context und öffnest sie selber in der Operationen Klasse. Besser für Kapselung wäre imho die 2. Variante.
    Ich würde übrigens auch mal über die Namensgebung nachdenken. Laut Konvention sollen Klassen immer im singular stehen und Auskunft geben über das was sie tut. Besser wäre hier vielleicht irgendwas wie DatenbankHelper oder ähnliches. Auch sollen Klassen groß geschrieben werden. Nur so als Hinweis ;)
     

Diese Seite empfehlen