Приложение вылетает при воспроизведении звука во втором адаптере просмотра списка
Мой класс состоит из списка, который содержит список треков. Каждый элемент списка состоит из кнопок Play и Pause. Он должен воспроизводить трек при нажатии play и останавливать трек при нажатии pause. Я не использую разные кнопки .... Я использую одну кнопку только который изменяет свой текст при нажатии ч / б воспроизведения и паузы и функции соответственно. У меня возникают следующие проблемы: щелчок по воспроизведению воспроизводит трек, но когда я останавливаю трек, нажимая паузу, а затем пытаюсь воспроизвести любой трек, приложение вылетает и показывает следующие ошибки, показывающие исключение нелегального состояния
ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: главная
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)
Открытый класс SoundClassAdapter Открытый SoundCloudAdapter расширяет ArrayAdapter MediaPlayer.OnPreparedListener {ArrayList soundcloudList; LayoutInflater vi; int Resource;
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()
трек не останавливается