2012-04-04 17 views
7

Bir radyo Akışını yayınlıyorum. Akıştaki şarkı değiştiğinde bir bildirim oluşturmak istiyorum. Geçerli akışın meta verilerini almak için streamscraper (http://code.google.com/p/streamscraper) kullanıyorum ve meta veriler değiştiğinde bir bildirim oluşturmaya çalışıyorum.Async Görevini Çağırmak

Bunu uygulamak için oluşturduğum Eşgüdüm Görevi.

public class updateMetadata extends 
     AsyncTask<String, Void, PlaylistSong<BaseArtist, BaseAlbum>> { 

    private static final String TAG = updateMetadata.class.getSimpleName(); 
    private PlaylistSong<BaseArtist, BaseAlbum> oldSong = null; 
    private PlaylistSong<BaseArtist, BaseAlbum> newSong = null; 
    private metadataHarvester fetchMetadata = new metadataHarvester(); 
    private String streamUrl = null; 

    @Override 
    protected PlaylistSong<BaseArtist, BaseAlbum> doInBackground(String... urls) { 
     for (String url : urls) { 
      try { 
       oldSong = fetchMetadata.prepareRadioSong(url); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      streamUrl = url; 
     } 

     newSong = oldSong; 

     while (newSong == oldSong) { 
      try { 
       newSong = fetchMetadata.prepareRadioSong(streamUrl); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 

     return newSong; 
    } 

    @Override 
    protected void onPostExecute(PlaylistSong<BaseArtist, BaseAlbum> song) { 
     Log.v(TAG, "New Song: " + song.getTitle()); 
    } 
} 

Uygulama, iki bağlantılı projeye dayanmaktadır. Proje A, Uygulamanın başlatıldığı ve Proje B'nin koleksiyonları ve oynatma mantığını içerdiği yerdir. Bu görevi Proje B'de kullanmak istiyorum. Oyun işlevi (B projesinde). Uygulamayı denediğimde uygulama çöküyor.

04-04 23:34:34.975: E/WindowManager(18080): Activity ch.ethz.dcg.pancho2.view.radioplayer.RadioPlayerActivity has leaked window [email protected] that was originally added here 
04-04 23:34:34.975: E/WindowManager(18080): android.view.WindowLeaked: Activity ch.ethz.dcg.pancho2.view.radioplayer.RadioPlayerActivity has leaked window [email protected] that was originally added here 
04-04 23:34:34.975: E/WindowManager(18080):  at android.view.ViewRoot.<init>(ViewRoot.java:258) 
04-04 23:34:34.975: E/WindowManager(18080):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148) 
04-04 23:34:34.975: E/WindowManager(18080):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 
04-04 23:34:34.975: E/WindowManager(18080):  at android.view.Window$LocalWindowManager.addView(Window.java:424) 
04-04 23:34:34.975: E/WindowManager(18080):  at android.app.Dialog.show(Dialog.java:241) 
04-04 23:34:34.975: E/WindowManager(18080):  at android.app.ProgressDialog.show(ProgressDialog.java:107) 
04-04 23:34:34.975: E/WindowManager(18080):  at android.app.ProgressDialog.show(ProgressDialog.java:90) 
04-04 23:34:34.975: E/WindowManager(18080):  at ch.ethz.dcg.pancho2.view.radioplayer.RadioPlayerActivity$5.onClick(RadioPlayerActivity.java:276) 
04-04 23:34:34.975: E/WindowManager(18080):  at android.view.View.performClick(View.java:2485) 
04-04 23:34:34.975: E/WindowManager(18080):  at android.view.View$PerformClick.run(View.java:9080) 
04-04 23:34:34.975: E/WindowManager(18080):  at android.os.Handler.handleCallback(Handler.java:587) 
04-04 23:34:34.975: E/WindowManager(18080):  at android.os.Handler.dispatchMessage(Handler.java:92) 
04-04 23:34:34.975: E/WindowManager(18080):  at android.os.Looper.loop(Looper.java:130) 
04-04 23:34:34.975: E/WindowManager(18080):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
04-04 23:34:34.975: E/WindowManager(18080):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-04 23:34:34.975: E/WindowManager(18080):  at java.lang.reflect.Method.invoke(Method.java:507) 
04-04 23:34:34.975: E/WindowManager(18080):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
04-04 23:34:34.975: E/WindowManager(18080):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
04-04 23:34:34.975: E/WindowManager(18080):  at dalvik.system.NativeStart.main(Native Method) 

Kafam karışık zaman uyumsuz Görevler benim anlayış: Burada

, tam hata izidir. Bu onları kullanmak için doğru bir yol değil mi?

DÜZENLEME: Yanıt ayrıca eklendi.

+0

Temel olarak, çıkış etkinliğinizden sonra iletişim göstermeye çalışıyorsunuz. Yukarıdakilerin gerçekleşmesinin çeşitli nedenleri vardır, ancak kodunuzdaki iletişim hakkında hiçbir şey göremiyorum. İletişim kullanıyor musunuz? –

+0

Hayır, geçerli şarkı değiştikten sonra yeni şarkıyı kaydetmeye çalışıyorum. Bu aşamada hiçbir diyalog veya herhangi bir şey yok. Zaten bir çok kanallı dinleyici ayarlamam var. Yeni şarkıları kontrol etmenin çalıştığından emin olduğumda bunu söyleyebilirim. – rahulthewall

+0

RadioPlayerActivity onclick yönteminizde herhangi bir iletişim veya ilerleme iletişim kutusu göstermeye mi çalışıyorsunuz? – Ads

cevap

2

TimerTask kullanarak çözüldü.

private void pollMetadata() { 

    lastSong = radioSong; 
    newSong = lastSong; 
    Log.i(TAG, "Old Song: " + lastSong.getTitle()); 
    Log.i(TAG, "New Song: " + newSong.getTitle()); 

    updateMetadataTask = new TimerTask() { 

     @Override 
     public void run() { 
      try { 
       newSong = metadata.prepareRadioSong(streamURL); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

      Log.i(TAG, "Old Song: " + lastSong.getTitle()); 
      Log.i(TAG, "New Song: " + newSong.getTitle()); 

      if (newSong.getTitle().equals(lastSong.getTitle())) { 
       Log.v(TAG, "SAME SONG"); 
      } 
      else { 
       Log.v(TAG, "SONG CHANGED"); 
       lastSong = newSong; 

       currentPlaylistManager.clearPlaylist(); 
       currentPlaylistManager.appendSongAtEnd(newSong); 
       listenerInformer.informCurrentSongChangeListener(newSong); 

      } 

     } 
    }; 

    t.schedule(updateMetadataTask, 300, 30000); 
}