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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage