Here is my playerview class.when the song first time played total song duration is set and seekbar runs,but when i do next the total song duration is of firstsong and it gives exception.
package com.musix.main; import com.musix.main.R; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.widget.ImageButton; import android.widget.SeekBar; import android.widget.TextView; public class LocalPlayerView extends Activity implements OnClickListener { private ImageButton btnnext, btnplay, btnprevious; LocalMediaPlayer mediaplayer; public static boolean drag = false, CHANGE; SeekBar sbCurrentSong; public static int mprogress; private int minutes, seconds, total; private TextView tvSongTotalTime, tvSongCurrentTime, txtsongname, txtalbumartistname; public void onCreate(Bundle instance) { super.onCreate(instance); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.localplayerview); mediaplayer = new LocalMediaPlayer(getApplicationContext()); loadUI(); } private void loadUI() { try { btnnext = (ImageButton) findViewById(R.id.next); btnnext.setOnClickListener(this); btnplay = (ImageButton) findViewById(R.id.play); btnplay.setOnClickListener(this); btnprevious = (ImageButton) findViewById(R.id.previous); btnprevious.setOnClickListener(this); txtsongname = (TextView) findViewById(R.id.txtsongname); txtalbumartistname = (TextView) findViewById(R.id.txtalbumartistname); tvSongTotalTime = (TextView) findViewById(R.id.tvSongTotalTime); tvSongCurrentTime = (TextView) findViewById(R.id.tvSongCurrentTime); setSongDetails(); startProgress(); sbCurrentSong = (SeekBar) findViewById(R.id.sbCurrentSong); sbCurrentSong .setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { String seconds; String str = new String(); mprogress = progress; if (fromUser) LocalMediaPlayer.mediaplayer.seekTo(progress); sbCurrentSong.setProgress(progress); seconds = Integer .toString(((progress / 1000) % 60)); // Here if condition check the second string length // if length // is equal to 1 then we add 0 infront of that // string. if (seconds.length() == 1) str = str.concat("0" + seconds); else str = seconds; int ctime = ((progress / 1000) / 60); // Here if condition check the current time if it // is less than 9 then we will add 0 infront of it if (ctime > 9) { tvSongCurrentTime.setText(Integer .toString(ctime) + ":" + str); } else { tvSongCurrentTime.setText("0" + Integer.toString(ctime) + ":" + str); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub } @Override public void onStopTrackingTouch(SeekBar seekBar) { // TODO // Auto-generated // method // stub } }); } catch (Exception e) { e.printStackTrace(); } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.play: if (LocalMediaPlayer.mediaplayer.isPlaying()) { LocalMediaPlayer.mediaplayer.pause(); btnplay.setBackgroundResource(R.drawable.play_button); LocalMediaPlayer.isPaused = true; } else { btnplay.setBackgroundResource(R.drawable.pause_button); mediaplayer.startPlayer(); } break; case R.id.next: btnplay.setBackgroundResource(R.drawable.pause_button); mediaplayer.next(); runOnUiThread(new Runnable() { @Override public void run() { setSongDetails(); //startProgress(); } }); break; case R.id.previous: btnplay.setBackgroundResource(R.drawable.pause_button); mediaplayer.previous(); runOnUiThread(new Runnable() { @Override public void run() { setSongDetails(); //startProgress(); } }); break; default: break; } } public void startProgress() { try { new Thread() { public void run() { // mp is your MediaPlayer // progress is your ProgressBar int currentPosition = 0; total = LocalMediaPlayer.mediaplayer.getDuration(); sbCurrentSong.setMax(total); setTotalSongDuaration(); while (LocalMediaPlayer.mediaplayer != null && currentPosition < total) { try { Thread.sleep(1000); currentPosition = LocalMediaPlayer.mediaplayer .getCurrentPosition(); } catch (InterruptedException e) { return; } catch (Exception e) { return; } sbCurrentSong.setProgress(currentPosition); } } }.start(); } catch (Exception e) { e.printStackTrace(); } } public void setSongDetails() { try { txtsongname.setText(LocalTrack.LOCALTRACKLIST .get(LocalMediaPlayer.CURRENTINDEX)); txtalbumartistname.setText(LocalTrack.LOCALALBUMLIST .get(LocalMediaPlayer.CURRENTINDEX) + "-" + LocalTrack.LOCALARTISTLIST .get(LocalMediaPlayer.CURRENTINDEX)); } catch (Exception e) { e.printStackTrace(); } } public void setTotalSongDuaration() { minutes = (int) ((total / 1000) / 60); seconds = (int) ((total / 1000) % 60); // Here if condition check minute is less than 10 then it will check for // seconds. if (minutes < 10) { // Here if condition check if second is less than 9 then it will add // 0 infront // of seconds. if (seconds <= 9) tvSongTotalTime.setText("0" + Integer.toString(minutes) + ":" + "0" + Integer.toString(seconds)); else tvSongTotalTime.setText("0" + Integer.toString(minutes) + ":" + Integer.toString(seconds)); } else { // Here if condition check if second is less than 9 then it will add // 0 infront // of seconds. if (seconds <= 9) tvSongTotalTime.setText(Integer.toString(minutes) + ":" + "0" + Integer.toString(seconds)); else tvSongTotalTime.setText(Integer.toString(minutes) + ":" + Integer.toString(seconds)); } tvSongTotalTime.refreshDrawableState(); } } Here is the error log. W/dalvikvm( 341): threadid=8: thread exiting with uncaught exception (group=0x4001d800) E/AndroidRuntime( 341): FATAL EXCEPTION: Thread-11 E/AndroidRuntime( 341): android.view.ViewRoot $CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. E/AndroidRuntime( 341): at android.view.ViewRoot.checkThread(ViewRoot.java:2802) E/AndroidRuntime( 341): at android.view.ViewRoot.requestLayout(ViewRoot.java:594) E/AndroidRuntime( 341): at android.view.View.requestLayout(View.java:8125) E/AndroidRuntime( 341): at android.view.View.requestLayout(View.java:8125) E/AndroidRuntime( 341): at android.view.View.requestLayout(View.java:8125) E/AndroidRuntime( 341): at android.view.View.requestLayout(View.java:8125) E/AndroidRuntime( 341): at android.view.View.requestLayout(View.java:8125) E/AndroidRuntime( 341): at android.widget.TextView.checkForRelayout(TextView.java:5378) E/AndroidRuntime( 341): at android.widget.TextView.setText(TextView.java:2688) E/AndroidRuntime( 341): at android.widget.TextView.setText(TextView.java:2556) E/AndroidRuntime( 341): at android.widget.TextView.setText(TextView.java:2531) E/AndroidRuntime( 341): at com.musix.main.LocalPlayerView.setTotalSongDuaration(LocalPlayerView.java: 213) E/AndroidRuntime( 341): at com.musix.main.LocalPlayerView $4.run(LocalPlayerView.java:162) can anybody can be how can i solve out this problem? -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en