App stürzt beim zweiten Abspielen von Audio im Adapter der Listenansicht ab
Meine Klasse besteht aus einer Listenansicht, die eine Liste von Titeln enthält. Jedes Listenelement besteht aus den Schaltflächen Wiedergabe und Pause. Es sollte Titel beim Klicken auf Wiedergabe wiedergeben und Titel beim Klicken auf Pause anhalten. Ich verwende keine verschiedenen Schaltflächen. Ich verwende eine Schaltfläche nur, die ihren Text beim Klicken auf s / w-Wiedergabe und Pause ändert und entsprechend funktioniert. Ich habe folgende Probleme: Wenn ich auf Wiedergabe klicke, wird der Titel abgespielt, aber wenn ich den Titel durch Klicken auf Pause stoppe und dann versuche, einen Titel abzuspielen, stürzt die App ab und es werden folgende Fehler angezeigt, die eine illegale Ausnahme anzeigen
FATAL EXCEPTION: main
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 öffentliche Klasse SoundCloudAdapter erweitert ArrayAdapter implementiert 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;
}
}
wenn ich @ deklarie
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setOnPreparedListener(this); inside onClick()
track pausiert nicht