Im Thread ermittelte Zahl, in SwitchCase verwenden

  • Antworten:4
Pascal Kieninger
  • Forum-Beiträge: 5

26.05.2015, 00:11:19 via Website

Hallo zusammen, mein Problem ist wie folgt. Ich habe einen Thread, in dem ich u.a. die Zufallszahl "rando" ermittle (zwischen 1-3), diese Zufallszahl ist eine Global deklarierte Variable und ich brauche sie für meine darunterliegende Switch Case Bedingung.
Jedoch komme ich in keinen Case rein.
Meine Vermutung ist, da der Thread und das übrige Programm ja paralell ablaufen, die Zufallszahl erst zu spät ermittelt wird und so nicht von der Switch-Case Bedingung benutzt werden kann.
Ich bin über jegliche Hilfe dankbar! Ist ein Schulprojekt in das ich schon etliche Stunden investiert habe. Vielen Dank schon mal!!!

  progressBar = (ProgressBar) findViewById(R.id.progressBar1);
          textView = (TextView) findViewById(R.id.textView1);
          // Start long running operation in a background thread
          new Thread(new Runnable() {
             public void run() {
                while (progressStatus < 90 && progressStatus > 10) {   
                   progressStatus += 1;
                   if(progressStatus == 70){
                   System.out.println("70 erreicht");
                   rando =(int) (Math.random()*3+1);}  // HIER DIE GENANNTE ZEILE!

handler.post(new Runnable() {
public void run() {
   progressBar.setProgress(progressStatus);
   textView.setText("Blutzucker:   " + progressStatus+"/"+progressBar.getMax()); 
} 
    });
    try {
       // Sleep for 200 milliseconds. 
                     //Just to display the progress slowly
       Thread.sleep(500); //War auf 500
    } catch (InterruptedException e) {
       e.printStackTrace();
    }
 }

}
} ).start()

switch(rando){

        case 1:

            button1.setBackgroundResource(R.drawable.pressed);

        button1.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {    
                if (progressStatus >= 70 && progressStatus < 90) {
                            progressStatus = progressStatus - 20;
                            System.out.println("rando ist:" + rando);
                            System.out.println("Schnösel");

                        }
                }
        });break;

        case 2:

                button1.setBackgroundResource(R.drawable.pressed);

        button2.setOnClickListener(new View.OnClickListener() {
            public void onClick(View b) {       
                if (progressStatus >= 70 && progressStatus < 90) {
                        progressStatus = progressStatus -20;
                        System.out.println("rando ist:" + rando);
                        System.out.println("Peter");

                    }
                } 
        });break;

        case 3:

                button1.setBackgroundResource(R.drawable.pressed);

        button3.setOnClickListener(new View.OnClickListener() {
            public void onClick(View n) {   
                if (progressStatus >= 70 && progressStatus < 90) {
                        progressStatus = progressStatus -20;

                        System.out.println("rando ist:" + rando);
                        System.out.println("Ralf");
                    }
                }
        });break;
}
}

— geändert am 26.05.2015, 10:56:48

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

26.05.2015, 07:14:58 via App

Hallo Pascal Kieninger,

Herzlich willkommen bei uns im Forum :)

Bitte beachte, dass Threads mit nicht aussagekräftigem Titel bei uns üblicherweise den Regeln entsprechend entfernt werden. Ich bitte dich daher, deinen Threadtitel innerhalb der nächsten 24 Stunden, spätestens jedoch bei deinem nächsten Besuch noch etwas aussagekräftiger zu gestalten (Hierfür einfach unter deinem ersten Beitrag auf 'bearbeiten' klicken, dann kannst du] oben noch mal den Titel anpassen)

Danke :)


Warum berechnetst du die Zufallszahl in einem andenen Thread?
Wen du das im mainthread machst würde es passen.
Und durch die while kann es sein dass die zahl gleich 10 mal berechnet wird und immer unterschiedlich.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Pascal Kieninger
  • Forum-Beiträge: 5

26.05.2015, 11:04:11 via Website

oh ja klar, hab ich geändert, war gestern einfach zu müde noch was vernünftiges zu schreiben.

Nun ja, ich will die Random Zahl eben in dem Thread berechnen, weil ich will, dass erst danach eine der SwitchCases Bedingungen erfüllt ist. In meinen Cases sollen nämlich den Hintergrund des Buttonsgeändert werden, und dass soll man nicht schon die ganze Zeit davor sehen, sondern erst, wenn die ProgressBar (bzw progressStatus) den Wert 70 erreicht hat. (Siehe //Hier die genannte Zeile)

ist das verständlich? :? :)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

26.05.2015, 14:00:35 via App

Threads haben ja die besonderheit dass es im Hintergrund ausgeführt wird.
Dass heisst du musst deine switch erst aufrufen wenn du mit dem berechnen Zufallszahl fertig bist. somit ergibt sich nsch dem berechnen muss die Switch stehen. Aber bitte in eine runOnUiThread mir reinnahmen.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Pascal Kieninger
  • Forum-Beiträge: 5

26.05.2015, 23:28:26 via Website

schon mal vielen Dank!! :) Das habe ich mir schon fast gedacht gehabt. Wie stelle ich das an, dass ich erst den Swtich Case aufrufe, wenn du zufallszahl im Thread berechnet wurde?
Ich bin relativ in Java, deshalb beschränke ich mich häufig nur auf das nötigste, ist die runOniThread Methode essentiell wichtig?

Antworten