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

Die richtige Übergabe von Context / this

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Duckemai, 17.08.2011.

  1. Duckemai, 17.08.2011 #1
    Duckemai

    Duckemai Threadstarter Erfahrener Benutzer

    Beiträge:
    227
    Erhaltene Danke:
    6
    Registriert seit:
    05.04.2010
    Phone:
    Nexus
    Hallo,

    ich habe eine Activity, welche die Methode einer (Datenbank)Klasse aufrufen soll. (Die Datenbankklasse ist eine reine Klasse, also ohne extends oder ähnliches)

    Der Aufruf der Methode aus der Activity sieht so aus:


    private MeineDBKlasse meineDBKlasse;
    ...
    meineDBKlasse.openDBAndWrite(this, "stueck", anzahlStueck);


    Das "this" wird in der Klasse für SQLiteOpenHelper gebraucht:

    public KlasseSQLiteOpenHelper dbsqlstatement;
    ...
    public void openDBAndWrite(Context context, ...){
    dbsqlstatement = new KlasseSQLiteOpenHelper (context);
    ...
    }

    Aber schon der Funktionsaufruf openDBAndWrite(...) aus der Activity führt zu einer NullPointerException. this existiert zwar (klar!), aber kann wohl nicht so ohne weiteres in eine Klasse übergeben werden.

    Schreibe ich den gesamten Quelltext in die Activity hinein, klappt es.

    Kennt da jemand eine Lösung?

    Gruß
    Duckemai
     
  2. the_alien, 17.08.2011 #2
    the_alien

    the_alien Android-Lexikon

    Beiträge:
    1,559
    Erhaltene Danke:
    184
    Registriert seit:
    04.05.2009
    Die Übergabe von this macht kein Problem, du wirst wohl eher an anderer Stelle was falsch haben.
     
  3. sixi, 18.08.2011 #3
    sixi

    sixi Erfahrener Benutzer

    Beiträge:
    237
    Erhaltene Danke:
    64
    Registriert seit:
    20.01.2009
    Bist du sicher, dass du mit "this" den Context übergibst und nicht z.B. einen "OnClickListener" weil du die Methode innerhalb dieses Aufrufst? :)
    Wenn ja, dann hilft z.B. MeineActivity.this als Parameter - oder du speicherst dir den Context (in der onCreate-Methode) in eine Klassenvariable und übergibst diese.
     
  4. the_alien, 18.08.2011 #4
    the_alien

    the_alien Android-Lexikon

    Beiträge:
    1,559
    Erhaltene Danke:
    184
    Registriert seit:
    04.05.2009
    Wenn er keinen Context übergeben würde, dann könnte er es nicht kompilieren ;)
     
    Duckemai bedankt sich.
  5. sixi, 19.08.2011 #5
    sixi

    sixi Erfahrener Benutzer

    Beiträge:
    237
    Erhaltene Danke:
    64
    Registriert seit:
    20.01.2009
    Das ist 'nen Argument :)
     
    Duckemai bedankt sich.
  6. Duckemai, 20.08.2011 #6
    Duckemai

    Duckemai Threadstarter Erfahrener Benutzer

    Beiträge:
    227
    Erhaltene Danke:
    6
    Registriert seit:
    05.04.2010
    Phone:
    Nexus
    Habe nun festgestellt, dass ein:

    private MeineDBKlasse meineDBKlasse;

    also lediglich ein Objekt zu erzeugen nicht ausreicht.
    Wenn ich aber eine Instanz erzeuge:

    meineDBKlasse= new MeineDBKlasse ();

    dann klappt es mit der this-Übergabe.

    Bin mir zwar nicht sicher, ob das programmiertechnisch klug/richtig ist,
    aber -mein Gott- es funzt halt.

    Danke sixi, Danke the_alien
    Duckemai
     
  7. sixi, 20.08.2011 #7
    sixi

    sixi Erfahrener Benutzer

    Beiträge:
    237
    Erhaltene Danke:
    64
    Registriert seit:
    20.01.2009
    Hehe, dann ist das Problem natuerlich klar :)
    Das Objekt wird erst erzeugt, wenn du es instanzierst. Sonst hast du nur dieVariable (=den Speicherplatz) deklariert. Also so MUSST du es machen
     

Diese Seite empfehlen