Objekt-Übergreifende übergabe von ArrayList mit eigenen Objekten

S

stoli

Stammgast
95
Hi Leute,

Ich versuche mich gerade mit Android App Programmierung auseinander zu setzen und wollte ein Java Programm portieren.
Mit dem Gedankengang: "Android verwendet ja auch Java, wir schon nicht so ein Problem sein" im Hinterkopf habe ich mich ans Werk gemacht.

Aber dann traf mich der Blitz der Erkenntinis ... Java != Android-Java.

In Java kann man wunderbar mittels setter und getter Objekten in anderen Ojekten übergben, auch komplette ArrayList mit Objekten. Andoid zeigt mir den Vogel.

Nach ein wenig Suche bin ich auf Parcelable aufmerksam geworden. Die funktionsweise ist mir einigermaßen klar, aber dann auch wieder nicht.

In Java hab ich das zum Beispiel so gelöst (Pseudo Code)

Code:
Class Spieler (String name) { 
//Beschreibt einen Spieler und hält 
// sein Kartendeck Mit getCardDeck erhält man die ArrayList mit
// den Karten

	cards ArrayList<Card> = new ArrayList Card;
	this.name = name;	
}

Class Card { //Klasse welche die Karten beschreibt
	int Farbe
	int value
}


Class CardDeck { 
//diese Klasse generiert automatisch ein Kartendeck 
// welches mit get-Methode getCardfromDeck eine Karte abgerufen wird

	cardDeck ArrayList<Card> = new ArrayList Card;
	
}


Class Main {  //Die Main Class
	
	CardDeck carddeck = new cardDeck();
	players ArrayList<Player> new ArrayList<Player>

	player.add(new Player("a"));
	player.add(new Player("b"));
	player.add(new Player("c"));
	player.add(new Player("d"));


for {...
	player.get(0).addCardToPlayerDeck(carddeck.getCardfromDeck()); 

// Hier werden wür alle Spieler die Karten in einer Schleife zugeteilt.
..
..
... }
	

}

Normalerweise konnte ich nun mit player.get(0).getCardDeck(). die komplette ArrayList des Player Objektes abrufen und sogar mit

player.get(0).getCardDeck().get(i)... die einzelnen Karten wieder abarbeiten. Und das ging auch super über Klassen hinweg, den eigentlich möchte ich jetzt einer GUI Activity die ArrayList mit den player Objekten übergeben und mit deren Informationen die Oberfläche zeichnen, doch dazu muss ich natürlich auch an die Informationen welche in der ArrayList der Spieler mit den Karten liegt.

Tut mir leid das ich meinen genauen Code nicht mehr verfügbar habe, aber ich hoffe es ist einigermaßen verständlich. Mir stellt sich jetzt die Frage wie ich hier mit parcelable arbeiten muss, oder gibt es hier in Android auch "einfachere" Methoden. Oder ist das schlichtweg unmöglich?

Danke.

Gruss
Stoli
 
Im Prinzip kannst du unter Android Objekte genauso übergeben, wie du es unter Java kennst.

Das geht nur dann nicht, wenn du zwischen verschiedenen Prozessen (sprich Apps) Daten austauschen willst. In diesem Fall musst du eine Verbindung zwischen den Prozessen aufmachen und die Daten in serialisierter Form übergeben. Ein Intent ist so eine Art Verbindung, die mittels der Parcelable-Schnittstelle dich dabei unterstützen will.

Du kannst aber auch andere Wege geben, wie zum Beispiel java.io.Serializable implementieren (Mit den Problemen, die man auch im Desktop Java hat).

Wenn alles innerhalb einer Appliaktion bleiben soll, kann man auch in einer statischen(globalen) Variable Daten hin- und her schaufeln. Das bringt allerdings auch Probleme mit sich, weil du über den Lifecycle deiner App nur wenig Kontrolle hast.
 
  • Danke
Reaktionen: stoli
Hi,

danke für die Antwort, das hatte ich eigentlich versucht, allerdings bekam ich den allseits beliebten NullPointerException. Werd mich heute am Abend nochmal ran machen, aber irgendwie wollte es bei meinen letzte Versuchen nicht so klappen.

Gruss
Stoli
 
Ja, ich hab mich auch schon darüber geärgert, daß man dem Intent kein eigenes Objekt mitgeben kann.

Ich denke, für einfache Datenobjekte kann man Parceable implementieren, aber für komplexere Objekte / Listen usw. würde ich auch statische Objekte benutzen oder einfach die Datenbank mißbrauchen. Die DB-Zugriffe sind sehr schnell und haben den Vorteil, daß du vom Lifecycle her sauber bist :smile:
 
  • Danke
Reaktionen: stoli
Hi Tom,

Also liege ich doch richtig das man komplexe (selbst erstellte) Objekte nicht so einfach übergeben kann?

Beim lesen über Parcelable und im Gedanken daran das zu implementieren, in meinem Anwendungsfall, ist mir leicht übel geworden. Ich finde das komplett ... naja ... unübersichtlich.

Ganz ehrlich, darf ich da mal Fragen was sich Google dabei gedacht hat? Ist ja mal nicht so ein unerheblich Bestandteil einer Objektorientierten Sprache.

Die Idee über die Datenbank finde ich interessant. Statisch, ist mir ein bisschen zu unsicher.

Ich werde noch etwas herumexperimentieren. Falls jemand noch andere Vorschläge hat, ich nehme sie gerne an.

Gruss
Stoli
 
du kannst daten auch in dein application object speichern und von dort holen.
 
  • Danke
Reaktionen: stoli
Swordi, Danke.

Ich dachte immer das arbeiten mit Singletons sei schwer verpönt ist, aber nach deinem Beitrag habe ich mal ein bisschen gegooglet und was gefunden wo sogar ausdrücklich empfohlen wird das zu verwenden.

Tension When I Mention: Android's Application Object as a "Singleton"

Jetzt habe ich dank euch wieder die Qual der Wahl, Application object, Datenbank ... hossa das wird ein schöner Abend. :)

Gruss
Stoli
 
datenbank würd ich da nicht empfehlen dafür

kann sehr langsam sein, da es ja dateizugriffe sind.
 
  • Danke
Reaktionen: stoli
Außedem muss man Javaobjekte auch serialisieren, wenn man sie in eine DB schreibt, oder?
 
  • Danke
Reaktionen: stoli
Hi,

Danke nochmals für die Tipps, ich habe mich nun für die Methode über Application Object entschieden.
Hat sofort funktioniert.

Gruss
Stoli
 

Ähnliche Themen

FabianDev
Antworten
5
Aufrufe
530
swa00
swa00
R
Antworten
3
Aufrufe
1.571
Ritartet
R
5
Antworten
0
Aufrufe
734
539901
5
Zurück
Oben Unten