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

Reply via email to