# Wie kommunizieren Klassen untereinander?



## aquarium1974 (4. Okt 2012)

1. Frage:
- ich habe einen ganzen Haufen Zeugs programmiert (leider eine Gottklasse mit 1200 Zeilen)
- diese Gottklasse will ich jetzt entzerren
- ich will aus der Hauptactivity die Geodaten abfragen, wie mache ich denn jetzt die Klasse HelperLocation bei Hauptactivity bekannt?

2. Frage 
- muss die Klasse HelperLocation überhaupt eine Activity sein? Ich habe gelesen, dass Activities Bildschirmseiten von Apps darstellen. Ich stelle aber hier doch gar nichts dar, sondern frage die Geodaten ab
- daher: Activity ja oder nein?


3. Frage
- Activities kommunizieren IMMER über Intents, ist das so?
- Wenn ich nun eine Klasse/Activitiy zur Darstellung habe und eine zweite Klasse gebaut habe wo die GPS-Daten abgefragt werden muss das dann auch zwingend eine Activity sein?
- Kann ich auch in meiner Darstellungsklasse eine Objekt der GPS-Datenklasse instanzieren?
- ich will das trennen, denn sonst sammelt sich immer mehr Zeugs in der Hauptklasse und der Code wird unübersichtlich!
- oder ruft die eine Klasse die andere immer über einen Intent auf? (Kann doch nich sein, oder?)

3a. Frage
- kann ich denn eine aufgerufene Activity auch schlafen legen und wieder zurück zur aufrufenden Activity kehren?
- würde man das so machen, daß meine Hauptklasse die Klasse zur Positionsbestimmung aufruft und dann wieder Hauptklasse zurückkehrt (und das über Activities???)


4. Frage
- Kann mir jemand eine gute Quelle nennen wo ich mir das mal ansehen kann????



Ich hoffe es wird auch ohne Code verständlich... falls nein, bitte kurze Info, dann poste ich den Code!

Irgendwie fällt mir die objektorientierte Denke echt schwer.
Kann mir irgend jemand gute Android-Tutorials sagen? Hab schon zwei Bücher, aber daraus wird ich irgendwie nich so schau!


----------



## schlingel (4. Okt 2012)

> ich will aus der Hauptactivity die Geodaten abfragen, wie mache ich denn jetzt die Klasse HelperLocation bei Hauptactivity bekannt?


Instanzieren? Kommt darauf an wie du das gelöst hast.



> muss die Klasse HelperLocation überhaupt eine Activity sein?


Zeigst du die Klasse als Activity an? Wenn nein, nein.



> Activities kommunizieren IMMER über Intents, ist das so?


Es gibt auch andere Möglichkeiten, aber sie sollten über Intents kommunizieren. Das ist am verlässlichsten.



> Wenn ich nun eine Klasse/Activitiy zur Darstellung habe und eine zweite Klasse gebaut habe wo die GPS-Daten abgefragt werden muss das dann auch zwingend eine Activity sein?


Nein, wieso auch? Soll ja GPS-Daten abfragen und nicht Activity sein.



> Kann ich auch in meiner Darstellungsklasse eine Objekt der GPS-Datenklasse instanzieren?


Warum nicht, aber es ist prinzipiell klüger solche Dinge in Services auszulagern. (Aber vergiss einmal den Begriff Service bis du die absoluten Basics verstanden hast.)



> oder ruft die eine Klasse die andere immer über einen Intent auf? (Kann doch nich sein, oder?)


Das wäre z.B. mit Services möglich. Also ein Hintergrunddienst der die GPS-Abfragen macht. Solche Services können dann BroadcastReceiver registrieren, die auf bestimmte Intents reagieren. Auf welche Intents kommt auf die gesetzte Action in den IntentFiltern an. Das geht natürlich auch vice versa. Aber fang mal klein an und versuche Activities zu verstehen bevor du zu den Services übergehst.



> kann ich denn eine aufgerufene Activity auch schlafen legen und wieder zurück zur aufrufenden Activity kehren?


Was verstehst du unter "schlafen"? Du kannst sie mit finish() beenden und dann kommst du zur letzten Activity am Activity-Stack deiner App zurück.



> würde man das so machen, daß meine Hauptklasse die Klasse zur Positionsbestimmung aufruft und dann wieder Hauptklasse zurückkehrt (und das über Activities???)


Nein, das hört sich falsch an. Ich sehe zwei vernünftige Möglichkeiten:
1. Du registrierst einen Service der die GPS-Location tracked. Über Intents oder ein ServiceBinding greifst du darauf zu. Ein ServiceBinding funktioniert wie RMI, du bindest dich an den Service und kannst dann ein Stub-Objekt verwenden um darauf zuzugreifen. Zweite Kommunikationsmöglichkeit ist, dass du das über Broadcast-Intents machst.
2. Du verwendest direkt deine Helper-Klasse die, die GPS-Daten holen in deiner Activity. *Empfehle ich dir*, da du dich so in viel weniger Technologien einlesen musst. Du scheinst ganz am Anfang zu stehen, also ist es gescheiter, du schaffst mal eine simpler gestrickte App zu programmieren bevor du dich in alle mögliche Konzepte stürzt ohne eine Chance auf Durchblick zu haben.



> Kann mir jemand eine gute Quelle nennen wo ich mir das mal ansehen kann????


Was genau? Code gibt's genug im Internet. Z.B.: auf meiner github Seite findest du gleich drei Android-Projekte soup-checker (kleine App die RSS-Feeds lesen kann), purchy gnome (kleine App zum Rechnungen speichern), Restl (Infrastrukturframework für Netzwerkkommunikatiion - nicht fertig, aber du siehst einmal wie so Services funktionieren. Hier wäre z.B. auch eine Broadcast-Infrastruktur bei Services abgebildet. Ist aber glaub ich ziemlich heavy für einen Anfänger.)



> Irgendwie fällt mir die objektorientierte Denke echt schwer.


Das ist wahrscheinlich dein Grundproblem. Schau dir einmal folgende Sachen an:
OOP-Skriptum der TU Wien
Head First Design Patterns



> Kann mir irgend jemand gute Android-Tutorials sagen?


Android UI Fundamentals Damit hab ich den Einstieg in Android geschafft. 
Ansonsten kann man generell die Vogella-Tutorials empfehlen.


----------



## aquarium1974 (4. Okt 2012)

Super! Danke für die ausführlichen Antworten!
Gruss

Peter


----------

