IllegalStateException error using MediaPlayer - Android

0

I am developing an app, it works, I give the list view the radio I want, it starts to play, but if I try to change the radio it fails.

Any solution?

Here the LogCat:

  

10-03 11: 56: 32.895 1410-1410 / com.david.animefm2   D / ViewRootImpl @ e6a08af [MainActivity]: ViewPostImeInputStage   processPointer 0 10-03 11: 56: 32.979 1410-1410 / com.david.animefm2   D / ViewRootImpl @ e6a08af [MainActivity]: ViewPostImeInputStage   processPointer 1 10-03 11: 56: 32.980 1410-1410 / com.david.animefm2   D / AbsListView: onTouchUp () mTouchMode: 0

     

--------- beginning of system 10-03 11: 56: 33.056 1410-1410 / com.david.animefm2 V / MediaPlayer-JNI: stop 10-03   11: 56: 33.056 1410-1410 / com.david.animefm2 V / MediaPlayer: stop 10-03   11: 56: 33.056 1410-1630 / com.david.animefm2 V / MediaPlayer: message   received msg = 8, ext1 = 0, ext2 = 0 10-03 11: 56: 33.056   1410-1630 / com.david.animefm2 V / MediaPlayer: unrecognized message: (8,   0, 0) 10-03 11: 56: 33.056 1410-1630 / com.david.animefm2 V / MediaPlayer:   callback application 10-03 11: 56: 33.057 1410-1630 / com.david.animefm2   V / MediaPlayer: back from callback 10-03 11: 56: 33.058   1410-1410 / com.david.animefm2 V / MediaPlayer-JNI: release 10-03   11: 56: 33.058 1410-1410 / com.david.animefm2 V / MediaPlayer: setListener   10-03 11: 56: 33.058 1410-1410 / com.david.animefm2 V / MediaPlayer:   disconnect 10-03 11: 56: 33.088 1410-1410 / com.david.animefm2   V / MediaPlayer: destructor 10-03 11: 56: 33.089   1410-1410 / com.david.animefm2 V / MediaPlayer: disconnect 10-03   11: 56: 33.107 1410-1410 / com.david.animefm2 D / AndroidRuntime: Shutting   down VM

     

--------- beginning of crash 10-03 11: 56: 33.115 1410-1410 / com.david.animefm2 E / AndroidRuntime: FATAL EXCEPTION: main                                                                     Process: com.david.animefm2, PID: 1410                                                                     java.lang.IllegalStateException                                                                         at android.media.MediaPlayer.nativeSetDataSource (Native Method)                                                                         at android.media.MediaPlayer.setDataSource (MediaPlayer.java:1173)                                                                         at android.media.MediaPlayer.setDataSource (MediaPlayer.java:1129)                                                                         at   com.david.animefm2.MainActivity.BotonRepeat (MainActivity.java:102)                                                                         at com.david.animefm2.MainActivity.SetUrl (MainActivity.java:95)                                                                         at com.david.animefm2.MainActivity.access $ 100 (MainActivity.java:18)                                                                         at com.david.animefm2.MainActivity $ 2.onItemClick (MainActivity.java:57)                                                                         at android.widget.AdapterView.performItemClick (AdapterView.java:339)                                                                         at android.widget.AbsListView.performItemClick (AbsListView.java:1718)                                                                         at android.widget.AbsListView $ PerformClick.run (AbsListView.java:4184)                                                                         at android.widget.AbsListView $ 13.run (AbsListView.java:6754)                                                                         at android.os.Handler.handleCallback (Handler.java:751)                                                                         at android.os.Handler.dispatchMessage (Handler.java:95)                                                                         at android.os.Looper.loop (Looper.java:154)                                                                         at android.app.ActivityThread.main (ActivityThread.java:6776)                                                                         at java.lang.reflect.Method.invoke (Native Method)                                                                         at   com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1520)                                                                         at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1410)

Here is my code:

package com.david.animefm2;

import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.media.AudioManager;
import android.os.Bundle;
import android.media.MediaPlayer;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.io.IOException;
import java.util.ArrayList;


public class MainActivity extends Activity {

    private ArrayList radios;
    private TextView tvNombre, tvNumCelda;
    private RadioAdapter adapter;
    private ListView lvRadios;
    private int isPlay ;
    private String url ="";
    private MediaPlayer mediaPlayer = new MediaPlayer();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //config
        setVolumeControlStream(AudioManager.STREAM_MUSIC);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

        //variables
        radios = new ArrayList<radio>();
        rellenarArrayList();
        adapter = new RadioAdapter(this, radios);
        lvRadios = (ListView) findViewById(R.id.lvRadeo);
        lvRadios.setAdapter(adapter);

        //Boton Reproducir y pausa
        Button start = (Button) findViewById(R.id.START);
        start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                BotonReproducir();
            }
        });

        //Lista
        ListView lista = (ListView) findViewById(R.id.lvRadeo);
        lista.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView adapterView, View view, int i, long l) {
                SetUrl(i);
            }
        });
    }
    private void rellenarArrayList() {
        radios.add(new radio("Radio Vocaloid", R.drawable.radiovocaloid));
        radios.add(new radio("Radio Anime", R.drawable.ic_home_black_24dp));
        radios.add(new radio("caballo", R.drawable.ic_home_black_24dp));
        radios.add(new radio("camaleon", R.drawable.ic_home_black_24dp));
        radios.add(new radio("canario", R.drawable.ic_home_black_24dp));
        radios.add(new radio("cerdo", R.drawable.ic_home_black_24dp));
        radios.add(new radio("delfin", R.drawable.ic_home_black_24dp));
        radios.add(new radio("gato", R.drawable.ic_home_black_24dp));
        radios.add(new radio("iguana", R.drawable.ic_home_black_24dp));
        radios.add(new radio("lince", R.drawable.ic_home_black_24dp));
        radios.add(new radio("lobo", R.drawable.ic_home_black_24dp));
        radios.add(new radio("morena", R.drawable.ic_home_black_24dp));
        radios.add(new radio("orca", R.drawable.ic_home_black_24dp));
        radios.add(new radio("perro", R.drawable.ic_home_black_24dp));
        radios.add(new radio("vaca", R.drawable.ic_home_black_24dp));
    };

    private void SetUrl(int i){
        if(mediaPlayer!=null && mediaPlayer.isPlaying()){
            mediaPlayer.stop();
            mediaPlayer.release();
        }
        Toast.makeText(getApplicationContext(), "posicion " + (i), Toast.LENGTH_SHORT).show();
        switch (i) {
            case 0:
                url= "http://curiosity.shoutca.st:8019/stream"; //Radio Vocaloid http://www.radiovocaloid.com/
                isPlay = 0;
                break;
            case 1:
                url="http://perseus.shoutca.st:9253/stream"; //Radio Anime http://www.radio-anime.net/
                isPlay = 0;
                break;
        };
        BotonReproducir();
    }

    private void BotonReproducir() {

        if (url != "") {
            try {
                mediaPlayer.setDataSource(url);
                mediaPlayer.prepare();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
            Toast.makeText(getApplicationContext(),"Bufering...", Toast.LENGTH_SHORT).show();
            mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer arg0) {
                    //Inicia reproducción.
                    mediaPlayer.start();
                }
            });
        } else {
            Toast.makeText(getApplicationContext(),"Select a rario", Toast.LENGTH_SHORT).show();
        }
    }

}
    
asked by Djdadi43 03.10.2017 в 12:03
source

1 answer

2

Use mediaPlayer.reset() instead of mediaPlayer.release() :

if(mediaPlayer!=null && mediaPlayer.isPlaying()){
   mediaPlayer.stop();

   //mediaPlayer.release();
   mediaPlayer.reset();
}

This is because release() removes the reference from the media player and therefore when releasing the object, it throws the error IllegalStateException .

    
answered by 03.10.2017 / 14:23
source