2012-04-03 7 views
1

Ich versuche, einen Radio-Player (mit Shoutcast-Streams) für Android zu implementieren. Was ich tun möchte, ist, während der Radio-Stream im Player geladen wird, zeigt die Benutzeroberfläche eine animierte Animation an. Bei erfolgreichem Laden (sobald der Song abgespielt wird) verschwindet die Animation.ProgressDialog in Android erscheint nicht (falsche Thread-Handhabung?)

Hier ist der Code, den ich verwende.

PlayStopStreamingButton.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
    Thread initializer = new Thread(new Runnable() { 

     @Override 
     public void run() { 
     Looper.myLooper(); 
     Looper.prepare(); 
     progressDialog = ProgressDialog.show(RadioPlayerActivity.this, "", "Selecting Radio Station", 
      true); 
     JukefoxApplication.getHandler().post(new Runnable() { 

      @Override 
      public void run() { 
      radioPlayerEventListener.onPlayStopStreamingButtonClicked(); 
      progressDialog.dismiss(); 
      } 
     }); 
     } 
    }); 
    initializer.start(); 

    } 
}); 

Ich bekomme keine drehende Animation. Ich bin mir fast sicher, dass mein Fehler in der falschen Handhabung von Threads liegt. Wenn jemand den richtigen Weg gehen könnte, wäre ich dankbar.

EDIT, dies scheint zu funktionieren:

PlayStopStreamingButton.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      progressDialog = ProgressDialog.show(RadioPlayerActivity.this, "", "Selecting Radio Station", true); 

      Thread initializer = new Thread(new Runnable() { 

       @Override 
       public void run() { 
        radioPlayerEventListener.onPlayStopStreamingButtonClicked(); 
        progressDialog.dismiss(); 
       } 
      }); 
      initializer.start(); 

     } 
    }); 
+0

Ich glaube, Sie es entlassen sehr schnell, und das ist, warum Sie sehe es nicht. –

Antwort

0

Sie müssen Fortschritte zeigen, auf UI-Thread-Dialog, siehe unten:

PlayStopStreamingButton.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
    Thread initializer = new Thread(new Runnable() { 

     @Override 
     public void run() { 
     Looper.myLooper(); 
     Looper.prepare(); 

     RadioPlayerActivity.this.runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       progressDialog = ProgressDialog.show(RadioPlayerActivity.this, 
            "", "Selecting Radio Station", true); 
      } 
     }); 

     JukefoxApplication.getHandler().post(new Runnable() { 

      @Override 
      public void run() { 
      radioPlayerEventListener.onPlayStopStreamingButtonClicked(); 

      RadioPlayerActivity.this.runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
          progressDialog.dismiss(); 
       } 
      }); 

     } 
    }); 
    initializer.start(); 

    } 
}); 
+0

Danke, mir war das runOnUiThread-Bit nicht bekannt. Inzwischen habe ich aber auch eine funktionierende Lösung implementiert (die als weitere Antwort hinzugefügt wurde, wenn etwas nicht stimmt, bitte sag es mir). Danke für deine Zeit und Mühe. – rahulthewall