Search code examples
androidandroid-mediaplayerbaseadapter

I want to play the selected mp3 file from Listview


I just want to play selected mp3 file from the list.getting the position of the onItemClick but no response from the listview.

Getting the mp3 files from SDCard. Please Help me Thanks in advance.

My Fragment

ListView lv_recordersList;
 private ListViewAdapter adapter;
 ProgressDialog mProgressDialog;
 private List<String> myList;
 File file;


        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            // TODO Auto-generated method stub

            View v = inflater.inflate(R.layout.frag_recorders_list, null);
            lv_recordersList = (ListView) v.findViewById(R.id.lv_recordersList);

            myList = new ArrayList<String>();


            new DownloadJSON().execute();

        lv_recordersList.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            // TODO Auto-generated method stub
             String value = lv_recordersList.getItemAtPosition(position).toString();

             System.out.println("####### Value OnItemClick : " +value);

             try {
             mMediaPlayer.setDataSource(value);
                mMediaPlayer.prepare();
                mMediaPlayer.start();
             } catch (IllegalArgumentException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (SecurityException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IllegalStateException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
        }
    });

            return v;
        }



    public class DownloadJSON extends AsyncTask<Void, Void, Void>{

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();

            mProgressDialog = new ProgressDialog(getActivity());
            //mProgressDialog.setTitle("PlugLeads");
            mProgressDialog.setMessage("Loading...");
            mProgressDialog.setIndeterminate(false);
            mProgressDialog.show();

        }


        @Override
        protected Void doInBackground(Void... params) {
            // TODO Auto-generated method stub

            File directory = Environment.getExternalStorageDirectory();
            file = new File(directory + "/Plugleads");
            File list[] = file.listFiles();

            for (int i = 0; i < list.length; i++) {
                // if(checkExtension( list[i].getName())
                if (checkExtension(list[i].getName())) {
                    myList.add(list[i].getName());
                }
            }


            return null;
        }




        @Override
        protected void onPostExecute(Void result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
            //listview = (ListView) findViewById(R.id.listview);
            // Pass the results into ListViewAdapter.java
            adapter = new ListViewAdapter(getActivity(), myList);
            // Set the adapter to the ListView
            lv_recordersList.setAdapter(adapter);
            // Close the progressdialog
            mProgressDialog.dismiss();
        }



        private boolean checkExtension(String fileName) {
            String ext = getFileExtension(fileName);
            if (ext == null)
                return false;
            try {
                if (SupportedFileFormat.valueOf(ext.toUpperCase()) != null) {
                    return true;
                }
            } catch (IllegalArgumentException e) {
                return false;
            }
            return false;
        }

        public String getFileExtension(String fileName) {
            int i = fileName.lastIndexOf('.');
            if (i > 0) {
                return fileName.substring(i + 1);
            } else
                return null;
        }


    }

My Custom BaseAdapter getView() :

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub

    ImageView img_recorders_listitem;
    TextView tv_recorders_listitem;

    inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);


    View itemView = inflater.inflate(R.layout.frag_recorders_listitem, parent, false);

    img_recorders_listitem = (ImageView) itemView.findViewById(R.id.img_recorders_listitem);
    tv_recorders_listitem = (TextView) itemView.findViewById(R.id.tv_recorders_listitem);


    //resultp = data.get(position);
    System.out.println("$$$$$$$ ListP : " +myListp);

    pos = myListp.get(position);

    System.out.println("$$$$$$$ Pos : " +pos);


    tv_recorders_listitem.setText(pos);


    mMediaPlayer = new MediaPlayer();


    return itemView;
}

My Logcat

06-09 13:05:54.787: I/System.out(16669): ####### Value OnItemClick : gshsh_07-06-2016_12_11_17.mp3
06-09 13:05:54.803: W/System.err(16669): java.io.IOException: setDataSource failed.
06-09 13:05:54.804: W/System.err(16669):    at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1086)
06-09 13:05:54.808: W/System.err(16669):    at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1032)
06-09 13:05:54.809: W/System.err(16669):    at com.plugleads.feedback.record.Frag_RecordersList$1.onItemClick(Frag_RecordersList.java:69)
06-09 13:05:54.809: W/System.err(16669):    at android.widget.AdapterView.performItemClick(AdapterView.java:305)
06-09 13:05:54.809: W/System.err(16669):    at android.widget.AbsListView.performItemClick(AbsListView.java:1146)
06-09 13:05:54.809: W/System.err(16669):    at android.widget.AbsListView$PerformClick.run(AbsListView.java:3053)
06-09 13:05:54.809: W/System.err(16669):    at android.widget.AbsListView$3.run(AbsListView.java:3860)
06-09 13:05:54.809: W/System.err(16669):    at android.os.Handler.handleCallback(Handler.java:739)
06-09 13:05:54.814: W/System.err(16669):    at android.os.Handler.dispatchMessage(Handler.java:95)
06-09 13:05:54.814: W/System.err(16669):    at android.os.Looper.loop(Looper.java:135)
06-09 13:05:54.814: W/System.err(16669):    at android.app.ActivityThread.main(ActivityThread.java:5343)
06-09 13:05:54.814: W/System.err(16669):    at java.lang.reflect.Method.invoke(Native Method)
06-09 13:05:54.814: W/System.err(16669):    at java.lang.reflect.Method.invoke(Method.java:372)
06-09 13:05:54.814: W/System.err(16669):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
06-09 13:05:54.814: W/System.err(16669):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)

Please Help me.Thanks in advance.


Solution

  • As in log:

    IOException: setDataSource failed.
    

    Because gshsh_07-06-2016_12_11_17.mp3 is not valid file path for MediaPlayer.

    Use full path including directory name in which file is currently available. like:

    File directory = Environment.getExternalStorageDirectory();
    file = new File(directory + "/Plugleads/"+ value);
    FileInputStream fileInputStream = new FileInputStream(file);
    mMediaPlayer.setDataSource(fileInputStream.getFD());