Note that there are some explanatory texts on larger screens.

plurals
  1. POCalling Async Task
    primarykey
    data
    text
    <p>I am streaming a radio Stream. I want to generate a notification when the song in the stream changes. I am using streamscraper (http://code.google.com/p/streamscraper) to get the metadata of the current stream, and I try to generate a notification when the metadata changes. </p> <p>Here is the Async Task that I created to implement this. </p> <pre><code>public class updateMetadata extends AsyncTask&lt;String, Void, PlaylistSong&lt;BaseArtist, BaseAlbum&gt;&gt; { private static final String TAG = updateMetadata.class.getSimpleName(); private PlaylistSong&lt;BaseArtist, BaseAlbum&gt; oldSong = null; private PlaylistSong&lt;BaseArtist, BaseAlbum&gt; newSong = null; private metadataHarvester fetchMetadata = new metadataHarvester(); private String streamUrl = null; @Override protected PlaylistSong&lt;BaseArtist, BaseAlbum&gt; 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&lt;BaseArtist, BaseAlbum&gt; song) { Log.v(TAG, "New Song: " + song.getTitle()); } } </code></pre> <p>The application is built on two linked projects. Project A is where the Application is initialised and Project B contains the collections and the playing logic. I want to use this task in Project B. Here is the play function (in project B).</p> <pre><code>protected synchronized void play(final IMediaPlayerWrapper mp) { streamURL = streamFetcher.getStreamUrl(); Log.i(TAG, "Stream URL: " + streamURL); try { Log.i(TAG, "Testing metadata harvester"); radioSong = metadata.prepareRadioSong(streamURL); } catch (Exception e) { Log.w(TAG, e); } updateMetadata(radioSong); currentPlaylistManager.clearPlaylist(); currentPlaylistManager.appendSongAtEnd(radioSong); listenerInformer.informCurrentSongChangeListener(radioSong); try { mp.setSong(radioSong, streamURL); mp.play(); if (mp.isPlaying()) { setPlayerState(PlayerState.PLAY); } } catch (Exception e) { Log.w(TAG, e); setPlayerState(PlayerState.ERROR); } updateMetadata metadataChecker = new updateMetadata(); metadataChecker.execute(streamURL); } </code></pre> <p>When I try to execute it, the application crashes. </p> <p>Here, is the complete error trace:</p> <pre><code>04-04 23:34:34.975: E/WindowManager(18080): Activity ch.ethz.dcg.pancho2.view.radioplayer.RadioPlayerActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@4053e8f0 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 com.android.internal.policy.impl.PhoneWindow$DecorView@4053e8f0 that was originally added here 04-04 23:34:34.975: E/WindowManager(18080): at android.view.ViewRoot.&lt;init&gt;(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) </code></pre> <p>I am confused in my understanding of Async Tasks. Is this not the correct way to use them?</p> <p>EDIT: Answer added separately. </p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload