Klassenaufruf mit this, in externer Klasse schlägt fehl

  • Antworten:6
Martin Grulich
  • Forum-Beiträge: 56

30.03.2011, 16:59:08 via Website

Hi Leute,

ich weiß das ist Sicher eine blöde Frage, weil es vorraussichtlich auf mein fehlendes Wissen mit Java zusammenhängt.
Hoffe jedoch das Ihr mit helfen könnt.

Ich habe also eine eigene Klasse, die eine main Funktion enthält (siehe Code).

Nun meldet eclipse "Cannot Use this in static context".
Was die Meldung heißt ist mir klar, jedoch weiß ich nicht wie ich das umgehen, bzw lösen kann und habe auf die schnelle auch nichts gefunden was mein Problem lösen könnte.

Danke & Gruß Martin

1public static void main(String[] args) {
2 mHelper = new ReportsDatabase(this);
3 }

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

30.03.2011, 17:02:51 via Website

naja steht ja da

du kannst nicht this verwenden in static context

deine main ist eine static methode, also kein this.


such mal im google nach statischen methoden im java

swordiApps Blog - Website

Antworten
Tobias Lettl
  • Forum-Beiträge: 7

30.03.2011, 17:53:25 via Website

Martin,

mHelper = new ReportsDatabase(klassenname.this);


Gruß

Tobias Lettl

Antworten
Martin Grulich
  • Forum-Beiträge: 56

30.03.2011, 18:31:19 via Website

Hi Leute,

erst einmal danke für das Feedback. Inzwischen habe ich mal nach den statischen Methoden gegoogelt.
Wenn ich das also richtig verstehe, ist eine statische Methode unabhängig von dem Objekt.

Das ist aber warscheinlich nicht das was ich benötige, denn dieser Aufruf, soll ja den anderen Funktionen in der Klasse das Objekt mHelper zur Verfügung stellen, ist also daher schon Objektabhängig.
Mein erster Gedanke war bei der static main Methode, das diese halt beim Erstellen eines Objektes ausgeführt wird und daher direkt zur Verfügung stehen.

Wie kann ich also bewerkstelligen das ich eine Methode habe die beim Erstellen des Objektes das neue Objekt mHelper initialisiert um mit den anderen Funktionen darauf zugreifen zu können ?

[UPDATE]
Vielleicht hole ich der Einfachheit halber ein wenig weiter aus.
Also im grunde möchte ich lediglich die Funktionen, die remote via JSON Daten abholen und in die sqlite Datenbank schreiben sollen, auslagern, damit ich später darauf via Service drauf zugreifen kann und die Daten auch im Hintergrund holen kann.
Im Moment sind die beiden Funktionen die das machen in der ListActiviy untergrbracht, das funktioniert bisher gut, soll dann aber auch automatisch via Service im Hintergrund geschehen. Vielleicht habt Ihr da ja noch eine bessere Idee, als mein Ansatz. Vielleicht ist der ja auch völlig falsch.

Danke & Gruß Martin

— geändert am 30.03.2011, 19:57:20

Antworten
Gelöschter Account
  • Forum-Beiträge: 107

30.03.2011, 22:45:23 via Website

Da schmeiß ich Dir mal zwei grundsätzliche Begriffe der objektorientierten Programmierung an den Kopf:

* Abstraktion
* Information-Hiding

Beide haben unmittelbar miteinander zutun und sollten Dir helfen, Deinen Code so zu strukturieren, dass Du Dein Ziel erreichst.

Vielleicht noch als Stütze:
Deine Anwendung wird verschiedene Dinge tun wollen. Sie wird in die Datenbank schreiben wollen, sie wird per JSON mit einem Server reden wollen. Sie will die Daten irgendwie anzeigen. Alles sind unterschiedliche Concerns die auch in eigene Klassen (oder sogar Gruppen von Klassen) gehören. Du kannst Dir die Struktur auch als Schichten-Modell vorstellen. Grob skizziert: [Server: Datenbank->Daten-Modell->Service]->[JSON-Client->(SQL-Datenbank <-> Anzeigelogik)]. Das ist in etwa die übliche Logik. Zur Lektüre schau Dir mal noch Model-View-Controller (MVC) als Design-Pattern an (->Google).

Ich hoffe, das überfordert Dich jetzt nicht, da Du ja scheinbar eher am Anfang der Lernkurve steckst. Aber da Du Dir ja ausgiebig Gedanken machst, finde ich das nicht falsch.

Grundsätzlich empfehle ich aber noch ein gutes Java-Buch und schau Dir an, wenn Eclipse etwas gelb oder rot makiert. Das hat (fast) immer einen Grund ;)

VG Carsten

— geändert am 30.03.2011, 22:47:19

Seid nett zueinander: AndroidPIT-Regeln ;)

Antworten
Patrick S.
  • Forum-Beiträge: 8

31.03.2011, 10:12:26 via Website

Martin G.

Wie kann ich also bewerkstelligen das ich eine Methode habe die beim Erstellen des Objektes das neue Objekt mHelper initialisiert um mit den anderen Funktionen darauf zugreifen zu können ?

einfach im Constructor den mHelper initialisieren.

1public Klassenname(){
2 mHelper = new ReportsDatabase(this);
3}

Antworten