Im Dialog warten bis boolean = true

  • 7 Antworten
  • Letztes Antwortdatum
kukuk

kukuk

App-Anbieter (kostenlos)
37
Guten Morgen, ich lasse einen Custom Dialog anzeigen, nach 2s wird der handler aufgerufen. Von dem handler aus convertiere ich eine spracheingabe. Wenn reversing_record(); fertig ist, wird am ende reversing_spracheingabe = true; gesetzt. Leider läuft meine Anwendung durch die while Schleife nicht. Es hängt sich auf. Kann mir da jemand helfen?

Code:
    Context context = this;
        final Dialog dialog = new Dialog(context);
        dialog.setContentView(R.layout.reversing_sound);
        dialog.setTitle("Verarbeiten!");
                    
        final TextView txt1 = (TextView)dialog.findViewById(R.id.textView1);          
             
        final ImageView myAnimation = (ImageView)dialog.findViewById(R.id.imageView1);
        final Button close = (Button) dialog.findViewById(R.id.button1);
       
       
        final Handler handler  = new Handler();
         final Runnable runnable = new Runnable() {
             @Override
             public void run() {
               reversing_record();
                 if (dialog.isShowing()) {
                     while(reversing_spracheingabe){
                   
                   
                   txt1.setText("Bearbeitung erfolgreich durchgeführt!");
                   myAnimation.setImageResource(R.drawable.arrow);
                     }
                   
                   
                 }
             }
         };
         
         
         final Handler handler_ready  = new Handler();
         final Runnable runnable_ready = new Runnable() {
             @Override
             public void run() {
                 if (dialog.isShowing()) {
                   
                     dialog.dismiss();
                     return;
                 }
             }
         };
         
         
        close.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                toast_reversing_aborted();
                handler.removeCallbacks(runnable);
                dialog.dismiss();
            }
        }); 
       
         final AnimationDrawable myAnimationDrawable
         = (AnimationDrawable)myAnimation.getDrawable();

         myAnimation.post(
         new Runnable(){

           @Override
           public void run() {
            myAnimationDrawable.start();
           }
         });
         handler.postDelayed(runnable, 2000);
         handler_ready.postDelayed(runnable_ready, 5000);
        dialog.show();
[/code}
 
Schicke bitte ein Fehlermeldung (logcat).
 
Code:
private void waitForWifi(){
mProgressDialog =newDialog.Builder(MainActivity.this).show();

// creating a thread to wait until the connection is established
Thread t =newThread(){
@Override
publicvoid run(){
try{
while(!Utils.isConnected(MainActivity.this)){
// we wait until condition is matching to fit our needs
Thread.sleep(300);
}
mProgressDialog.dismiss();
// perform a new action
};
t.start();
}

PS: dafür hab ich auf SO zwei Downvotes bekommen - obwohl der Code funktioniert!!!!!!!!
 
"PS: dafür hab ich auf SO zwei Downvotes bekommen - obwohl der Code funktioniert!!!!!!!!"

Vllt weil das Try statement in run() nicht komplett ist?!
 
Hehe, nee... da hatte es schon gestimmt (hatte noch ein bisschen was kommentiert gehabt, damit derjenige auf SO sieht was noch alles ungünstig an seinem Code ist, und beim Löschen ist mir vorhin wohl etwas zuviel vor den Backspace gekommen) :)

Can't pause / sleep thread inside for loop
 
Und weil der Thread nicht vernünftig beendet wird. Try and Catch fängt zwar den Fehler ab, macht es aber nicht besser.
Da ist die Lösung über den SO - Beitrag schon besser.
 
Sehe ich anders.. Hatte noch nie ein Problem mit einem uninterruptetem Thread... Wie auch immer, vor wenigen Tagen war in der oberen Antwort noch ein Thread.sleep(1); und damit war die Antwort definitiv ungünstiger. :)
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: missspelled
Zurück
Oben Unten