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 [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en