0

How to get mp3 files from a folder in SDcard and show in custom listview using BaseAdapter and also want to play the song on Item Click.

I am getting the mp3 files from a SDCard particular folder using base adapter.Getting the mp3 files but unable to add to custom base Adapter. I am getting this exception :

java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getImportantForAccessibility()' on a null object reference using BaseAdapter.

Below is 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();


            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;
        }


    }

This is my CustomBaseAdapter

public class ListViewAdapter extends BaseAdapter{

Context context;
LayoutInflater inflater;
private List<String> myListp;

public ListViewAdapter(Context context,
        List<String> myList) {
    this.context = context;
    myListp= myList;

}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return myListp.size();
}

@Override
public Object getItem(int position) {
    // TODO Auto-generated method stub
    return myListp.get(position);
}

@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return position;
}

@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);


    return convertView;
}

My Logcat

 06-09 10:30:43.378: E/AndroidRuntime(21491): FATAL EXCEPTION: main
        06-09 10:30:43.378: E/AndroidRuntime(21491): Process: com.plugleads.feedbackform, PID: 21491
        06-09 10:30:43.378: E/AndroidRuntime(21491): java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getImportantForAccessibility()' on a null object reference
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.widget.AbsListView.obtainView(AbsListView.java:2363)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.widget.ListView.makeAndAddView(ListView.java:1864)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.widget.ListView.fillDown(ListView.java:698)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.widget.ListView.fillFromTop(ListView.java:759)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.widget.ListView.layoutChildren(ListView.java:1673)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.widget.AbsListView.onLayout(AbsListView.java:2151)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.view.View.layout(View.java:15689)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.view.ViewGroup.layout(ViewGroup.java:5040)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.view.View.layout(View.java:15689)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.view.ViewGroup.layout(ViewGroup.java:5040)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.view.View.layout(View.java:15689)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.view.ViewGroup.layout(ViewGroup.java:5040)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1043)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.view.View.layout(View.java:15689)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.view.ViewGroup.layout(ViewGroup.java:5040)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.view.View.layout(View.java:15689)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.view.ViewGroup.layout(ViewGroup.java:5040)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.support.v7.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:437)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.view.View.layout(View.java:15689)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.view.ViewGroup.layout(ViewGroup.java:5040)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.view.View.layout(View.java:15689)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.view.ViewGroup.layout(ViewGroup.java:5040)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.view.View.layout(View.java:15689)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.view.ViewGroup.layout(ViewGroup.java:5040)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.view.View.layout(View.java:15689)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.view.ViewGroup.layout(ViewGroup.java:5040)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2116)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1873)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1084)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5990)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.view.Choreographer.doCallbacks(Choreographer.java:580)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.view.Choreographer.doFrame(Choreographer.java:550)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.os.Handler.handleCallback(Handler.java:739)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.os.Handler.dispatchMessage(Handler.java:95)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.os.Looper.loop(Looper.java:135)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at android.app.ActivityThread.main(ActivityThread.java:5343)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at java.lang.reflect.Method.invoke(Native Method)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at java.lang.reflect.Method.invoke(Method.java:372)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
        06-09 10:30:43.378: E/AndroidRuntime(21491):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)

Please Help me.Thaks in advance...

2

4 Answers 4

3

your getView() method return null change the below code.

change this

 return convertView;

to this

return itemView;

Update : simply I am using this code that work for me to get the name of file.

File file = new File("/storage/sdcard0/abc.mp3"); 
String strFileName = file.getName();
Sign up to request clarification or add additional context in comments.

7 Comments

Thanks for the response. yes It worked but how do i get the name of the file and set it to listview BaseAdapter ?
how do i get the filename and position of the mp3 file to play ?
@Naveen see here is useful link to get all mp3 name. stackoverflow.com/questions/13568798/…
Thanks for response, how can i use your references ? actually i want to get the file name from my myListp Object ?
I am getting the file now i want to add listItemClick and want to play the selected file.Can you please help me.
|
1

As mentioned here look at your getView() method of the adapter. It probably returns null rather than the master view of the line. Sorry, nothing too exotic about that. Just a boring silly bug.

Comments

0

simply return the view instead of null

check in

public View getView(int i, View view, ViewGroup viewGroup) {
        View 

    mView=mLayoutInflater.inflate(R.layout.row_layout,viewGroup,false);
            TextView mUserPhone,mUserId,mUserName;
            mUserId=(TextView)mView.findViewById(R.id.mUserId);
            mUserPhone=(TextView)mView.findViewById(R.id.mUserPhone);
            mUserName=(TextView)mView.findViewById(R.id.mUserName);
            UserData mUserData= (UserData) getItem(i);
            mUserId.setText(mUserData.getuId());
            mUserName.setText(mUserData.getuName());
            mUserPhone.setText(mUserData.getuPhone());
            return null;
        }

Instead of that

 public View getView(int i, View view, ViewGroup viewGroup) {
        View mView=mLayoutInflater.inflate(R.layout.row_layout,viewGroup,false);
        TextView mUserPhone,mUserId,mUserName;
        mUserId=(TextView)mView.findViewById(R.id.mUserId);
        mUserPhone=(TextView)mView.findViewById(R.id.mUserPhone);
        mUserName=(TextView)mView.findViewById(R.id.mUserName);
        UserData mUserData= (UserData) getItem(i);
        mUserId.setText(mUserData.getuId());
        mUserName.setText(mUserData.getuName());
        mUserPhone.setText(mUserData.getuPhone());
        return mView;
    }

Comments

0
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);


return convertView;

In your code inplace of return convertView just change it to return itemView

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.