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

kleines OOP - Problem

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

  1. Duckemai, 14.01.2012 #1
    Duckemai

    Duckemai Threadstarter Erfahrener Benutzer

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

    ich kämpfe mal wieder mit einem OOP - Problem. Eigentlich simpel, es klappt aber trotzdem nicht.

    Ich habe in meiner Hauptklasse ein Objekt. (Genau genommen ist es für die Sprachausgabe ein Objekt:
    public TextToSpeech myTts;

    Wenn die Sprachausgabe läuft, dann möchte ich sie bei einem Anruf mittels BroadcastReceiver (in einer anderen Klasse) stoppen:
    if (hauptklasse.myTts != null) {
    hauptklasse.myTts.stop();
    }

    Aber wie greife ich nun auf dieses Objekt zu?

    Habe 2 Versuche gestartet:
    1. Hauptklasse hauptklasse= new Hauptklasse ();
    und
    2. Hauptklasse hauptklasse;

    Im ersten Fall erkennt er gar nicht, dass das Objekt befüllt ist, obwohl die Sprachausgabe läuft.
    Im 2ten Fall stürzt das Programm mit einer NullPointerException ab.

    Weiß jemand, wie ich es richtig machen muss?

    Vielen Dank!
     
  2. soma-web, 15.01.2012 #2
    soma-web

    soma-web App-Anbieter (kostenpfl.)

    Beiträge:
    146
    Erhaltene Danke:
    18
    Registriert seit:
    06.07.2011
    Zuletzt bearbeitet: 15.01.2012
    Duckemai bedankt sich.
  3. swordi, 15.01.2012 #3
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    leider kann das so überhaupt nicht gehen.

    bei variante 1) erstellst du ein neues objekt. das heißt es ist ganz neu, wie das NEW schon sagt. also hast du ne neue instanz die nichts von der aktuellen sprachausgabe weiß.

    bei variante erstellst du nur die member variable, ohne irgendwas. der member zeigt im speicher genau nirgends hin => NullpointerException

    Du musst jetzt dein TTS objekt irgendwie global verfügbar machen. Das könntest du zB mit einer Singleton Klasse erreichen.

    im Receiver kannst du dann über dieses Singleton auf das TTS objekt zugreifen.
     
    Duckemai bedankt sich.
  4. Duckemai, 15.01.2012 #4
    Duckemai

    Duckemai Threadstarter Erfahrener Benutzer

    Beiträge:
    227
    Erhaltene Danke:
    6
    Registriert seit:
    05.04.2010
    Phone:
    Nexus
    Singleton!!??

    Habe ich ja noch nie was von gehört. Aber eine globale Variable würde mir natürlich helfen. Wenn ich ein brauchbares Bsp für Android gefunden habe gebe ich noch mal Feedback.

    Danke!
     
  5. Duckemai, 15.01.2012 #5
    Duckemai

    Duckemai Threadstarter Erfahrener Benutzer

    Beiträge:
    227
    Erhaltene Danke:
    6
    Registriert seit:
    05.04.2010
    Phone:
    Nexus
    Hey mensch, das geht !!!!!!!!!!!!! Danke! :lol:

    Verstehe zwar nicht wirklich, warum und was es bewirkt, einfach den Namen der Hauptklasse zu nehmen, aber es funktioniert.
     
  6. swordi, 15.01.2012 #6
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    ich würde dir empfehlen dich mit den grundlagen auseinander zu setzen und zu verstehen, was du da tust.
     
  7. Duckemai, 15.01.2012 #7
    Duckemai

    Duckemai Threadstarter Erfahrener Benutzer

    Beiträge:
    227
    Erhaltene Danke:
    6
    Registriert seit:
    05.04.2010
    Phone:
    Nexus
    @Swordi: Ach weißt Du, ich habe schon zig Bücher zum Thema OOP gelesen. Dann denke ich, jetzt hast Du es gerafft und ich komme gut mit OOP voran. Und plötzlich klappt es nicht, wo ich hätte schwören können, so muss es aber sein. Die Alternative wäre nun, mit dem Programmieren aufzuhören. Dafür macht es mir aber zu viel Spass. :rolleyes:

    Tschuldigung, wenn ich hier ab und an mal ziemlich unqualifizierte Fragen stelle. Programmiere halt so alleine vor mich hin. Wahrscheinlich fehlt mir mal zu diesem Thema ein fachlicher Austausch.

    Danke aber. Hast mir ja schon ein paar mal aus der Patsche geholfen.
     
  8. swordi, 15.01.2012 #8
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    hmm wenn du mit dem begriff singleton nichts anfangen kannst, dann schau dich mal nach besseren büchern um :D
     
    the_alien bedankt sich.
  9. wilco, 18.01.2012 #9
    wilco

    wilco Android-Hilfe.de Mitglied

    Beiträge:
    106
    Erhaltene Danke:
    32
    Registriert seit:
    10.08.2010
    Hm. Muss jetzt gestehen trotz Informatikstudium und über einer Dekade Berufserfahrung ist mir der Begriff Singleton bisher auch noch nicht begegnet. Hoffe mir wird jetzt mein Diplom nicht wieder aberkannt... :crying:

    @Duckemai: Das ist einfach der Unterschied zwischen Klasse und Instanz einer Klasse. Die Klasse ist die Plätzchenform, die Instanz das Plätzchen das Du mit dieser Form stanzt.

    Du kannst Variablen auf Klassenebene definieren mit dem keyword "static". Dann kannst Du per Klasse.Variable auf diese Variable zugreifen. Die Variable hängt dann allerdings sozusagen an der Plätzchenform. Egal wieviele Plätzchen Du stanzt, static Variablen gibt es nur einmal. Wenn Du dann sagst Klasse.Variable ist somit eindeutig klar welche Variable Du meinst.

    Ohne das Wort static existiert eine Variable innerhalb der Klasseninstanz, also sozusagen innerhalb des Plätzchens. Und da es davon beliebig viele geben kann, musst Du um auf die Variable Zugreifen zu können erst mal auf die Klasseninstanz, das Plätzchen Zugriff haben.

    Das kannst Du z.B. so lösen:

    Code:
     
    Class MyClass  {
      Variable myVariable;
      NochneKlasse x;
     
      x = New NochneKlasse();
      x.myClass = this; //Damit übergibst Du einen Link auf die aktuelle Instanz Deiner Klasse MyClass an die x Instanz der Klasse NochneKlasse
    }
     
    Class NochneKlasse {
       MyClass myClass;
     
      //Jetzt kannst Du auf die Variable myVariable zugreifen per myClass.myVariable
    }
    
     

Diese Seite empfehlen