Zwei Methoden hintereinander ausführen?

E

Extremefall

Ambitioniertes Mitglied
3
Hallo,
wie kann ich zwei Methoden hintereinander ausführen, also sodass Methode eins erst beendet sein muss, bevor Methode zwei beginnt? Wie geht so etwas in Android?
 
Du kannst eine Methode als "synchronized" deklarieren. Das bedeutet im wesentlichen dass sie nicht unterbrochen werden kann.

Mehr dazu hier.
 
Ich habe nun eine Figur und auf gleicher Höhe ein Hindernis als Bild. Hier mein Code zum bewegen der Figur:
Code:
private synchronized void vorwaerts(int schritte) {
		ImageView figur = (ImageView) findViewById(R.id.spielfigur);
		ImageView wand= (ImageView) findViewById(R.id.wand);
		if (!Rect.intersects(generateRect(figur), generateRect(wand))) {
			bot_hindernis = false;
			MarginLayoutParams marginParams = new MarginLayoutParams(
					figur.getLayoutParams());
			marginParams.setMargins(getMarginLeft() + schritte, getMarginTop(),
					getMarginRight(), getMarginBottom());

			RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
					marginParams);
			figur.setLayoutParams(layoutParams);
		} else {
			bot_hindernis = true;
			Log.d("Hindernis",""+bot_hindernis);
			 gehZurueck(schritte);
		}
	}
bot_hindernis ist vorher auf false gesetzt.

Meine Frage: Wieso kann ich denn dann nicht folgendes machen:
Code:
while (!bot_hindernis){
vorwaerts();
}
Der Bildschirm im Emulator zeigt dann nichts mehr an und dann die Meldung, dass man entweder warten kann oder die App beenden kann, da sie nicht mehr reagiert. Wieso kommt es denn dazu? Könnt ihr mir da helfen? Denn deswegen wollte ich die Methoden nacheinander aufrufen. Wenn ich die Methoden einfach selbst ein paar Mal aufrufe, klappt es auch ganz normal. Nur mit der Schleife nicht.
 
Was ist denn vorwaerts()? Oben hast du uns vorwaerts(int schritte) vorgestellt.

Und den Aufruf kannst du machen, nur Android beschwert sich, dass der Aufruf zu lange dauert und "denkt" die App könnte in einer Endlosschleife festhängen und fragt sicherheitshalber mal den Benutzer, was zu tun ist. Das dürfte passieren, wenn schritte == 0 ist, oder deine Kollisionsabfrage nicht funktioniert.
 
Für mich sieht das so aus, als würde er keinen Thread verwenden
 
Wie meinst du das mit dem Thread? Wie mache ich es denn mit einem Thread? Denn diesen habe ich eigentlich nicht genutzt. Liegt da der Fehler?

Ich habe natürlich vergessen, den Parameter im Code anzugeben. In meinem Testcode habe ich es nun gemacht.

Könnt ihr mir irgendwie weiterhelfen? Mit Debuggen habe ich es schon probiert. Ich habe folgendes: Beim onClick wird die Method vorwaerts(10) aufgerufen. Das klappt auch soweit. Nun klicke ich zehn mal auf den Button und es wird dann beim Debuggen richtigerweise angezeigt, dass die Wand vor der Figur ist.

Nun habe ich folgendes gemacht:
Code:
vorwaerts(10);
vorwaerts(10);
vorwaerts(10);
vorwaerts(10);
vorwaerts(10);
vorwaerts(10);
vorwaerts(10);
vorwaerts(10);
vorwaerts(10);
vorwaerts(10);
Das Problem nun: Die Figur geht genauso weit, nur diesmal wird der Schnitt mit der Wand nicht erkannt. Wie kommt das? Was kann ich da machen? Denn dann hilft mir das Debuggen bisher noch nicht. Denn ich sehe, dass intersect false liefert, was für mich momentan keinen Sinn macht.
 
Wie muss ich die Methode denn mit Threads aufrufen? Liegt es eventuell daran oder woran könnte es bei meiner Problemschilderung am ehesten liegen?
 

Ähnliche Themen

C
Antworten
8
Aufrufe
1.123
swa00
swa00
H
Antworten
0
Aufrufe
929
HoustonWeHaveAProblem
H
H
Antworten
2
Aufrufe
1.111
heikoj10.1
H
Zurück
Oben Unten