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

Zwei Methoden hintereinander ausführen?

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Extremefall, 28.06.2012.

  1. Extremefall, 28.06.2012 #1
    Extremefall

    Extremefall Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    83
    Erhaltene Danke:
    1
    Registriert seit:
    29.03.2012
    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?
     
  2. wilco, 28.06.2012 #2
    wilco

    wilco Android-Hilfe.de Mitglied

    Beiträge:
    106
    Erhaltene Danke:
    32
    Registriert seit:
    10.08.2010
    Du kannst eine Methode als "synchronized" deklarieren. Das bedeutet im wesentlichen dass sie nicht unterbrochen werden kann.

    Mehr dazu hier.
     
  3. Extremefall, 28.06.2012 #3
    Extremefall

    Extremefall Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    83
    Erhaltene Danke:
    1
    Registriert seit:
    29.03.2012
    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.
     
  4. usaris, 28.06.2012 #4
    usaris

    usaris Erfahrener Benutzer

    Beiträge:
    207
    Erhaltene Danke:
    44
    Registriert seit:
    23.11.2011
  5. Thyrion, 29.06.2012 #5
    Thyrion

    Thyrion Ehrenmitglied

    Beiträge:
    11,849
    Erhaltene Danke:
    2,452
    Registriert seit:
    21.07.2009
    Phone:
    Nexus 5X
    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.
     
  6. Tom299, 29.06.2012 #6
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    Für mich sieht das so aus, als würde er keinen Thread verwenden
     
  7. Extremefall, 29.06.2012 #7
    Extremefall

    Extremefall Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    83
    Erhaltene Danke:
    1
    Registriert seit:
    29.03.2012
    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.
     
  8. Extremefall, 30.06.2012 #8
    Extremefall

    Extremefall Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    83
    Erhaltene Danke:
    1
    Registriert seit:
    29.03.2012
    Wie muss ich die Methode denn mit Threads aufrufen? Liegt es eventuell daran oder woran könnte es bei meiner Problemschilderung am ehesten liegen?
     

Diese Seite empfehlen