【发布时间】:2015-01-04 02:17:39
【问题描述】:
我的课程由包含曲目列表的列表视图组成。每个列表项由按钮播放和暂停组成。它应该在单击播放时播放曲目并在单击暂停时停止曲目。我没有使用不同的按钮....我是仅使用一个按钮,该按钮会在单击黑白播放和暂停时更改其文本,并相应地起作用。 我面临以下问题- 单击播放确实会播放曲目,但是当我通过单击暂停停止曲目然后尝试播放任何曲目时,应用程序崩溃并显示以下错误,显示非法状态异常
致命异常:主要
java.lang.IllegalStateException
at android.media.MediaPlayer._setDataSource(Native Method)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:966)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:926)
at xyz.SoundCloudAdapter$1.onClick(SoundCloudAdapter.java:86)
at android.view.View.performClick(View.java:4091)
at android.view.View$PerformClick.run(View.java:17072)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:153)
at android.app.ActivityThread.main(ActivityThread.java:5086)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
at dalvik.system.NativeStart.main(Native Method)
声音类适配器 公共类 SoundCloudAdapter 扩展 ArrayAdapter 实现 MediaPlayer.OnPreparedListener{ ArrayList soundcloudList; LayoutInflater vi; int 资源;
public static MediaPlayer mMediaPlayer;
public SoundCloudAdapter(Context context, int resource, ArrayList<SoundCloud> objects)
{
super(context, resource, objects);
vi = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
Resource = resource;
soundcloudList = objects;
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setOnPreparedListener(this);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
final ViewHolder holder;
// convert view = design
View v = convertView;
if (v == null)
{
holder = new ViewHolder();
v = vi.inflate(Resource, null);
holder.textview = (TextView) v.findViewById(R.id.name);
holder.btn = (Button) v.findViewById(R.id.button);
holder.btn2 = (Button) v.findViewById(R.id.button2);
holder.textview2 = (TextView) v.findViewById(R.id.email);
v.setTag(holder);
}
else
{
holder = (ViewHolder) v.getTag();
}
holder.textview.setText(soundcloudList.get(position).getTitle());
holder.textview2.setText(soundcloudList.get(position).getId());
holder.btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
notifyDataSetChanged();
if (holder.btn.getText().toString().equalsIgnoreCase("Play"))
{
holder.btn.setText("Pause");
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try
{
mMediaPlayer.setDataSource("http://api.soundcloud.com/tracks/"+soundcloudList.get(position).getId()+"/stream?client_id=xyz");
mMediaPlayer.prepareAsync();
}
catch (IllegalArgumentException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
notifyDataSetChanged();
}
else if (holder.btn.getText().toString().equalsIgnoreCase("Pause"))
{
holder.btn.setText("Play");
if(mMediaPlayer.isPlaying()) {
mMediaPlayer.stop();
}
mMediaPlayer.release();
notifyDataSetChanged();
}
}
});
return v;
}
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
static class ViewHolder
{
public TextView textview;
public Button btn;
public Button btn2;
public TextView textview2;
}
}
如果我声明
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setOnPreparedListener(this); inside onClick()
曲目不会暂停
【问题讨论】:
-
我认为您忘记在暂停按钮单击侦听器时释放 MediaPlayer。
-
@HareshChhelana 我没有使用第二个按钮..错误地我忘记删除代码..我只使用一个按钮,它会在单击黑白播放和暂停和相应的功能时更改其文本。 .检查更新的代码
-
@HareshChhelana 查看更新的问题..谢谢
-
@HareshChhelana 现在跟踪点击暂停时不会暂停
标签: android android-listview android-mediaplayer android-adapter