0

I trying create MP3 Player but i have a errors in my Android Studio. I tested on Sony Xperia T3. Please help! I don't know where is problem.. Error in FindSongs function (for(File singleFile : files))

821-821/dsada.dsada E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: dsada.dsada, PID: 821
    java.lang.NullPointerException
            at dsada.dsada.MainActivity.findSongs(MainActivity.java:63)
            at dsada.dsada.MainActivity$1.onClick(MainActivity.java:39)

My code:

import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.Toast;

import java.io.File;
import java.util.ArrayList;


public class MainActivity extends ActionBarActivity {

    String[] items;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button = (Button)findViewById(R.id.button);

        button.setOnClickListener(
                new Button.OnClickListener() {
                    public void onClick(View v)
                    {
                        /*String[] items = {"stachu"};
                        ListAdapter laftyAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, items);
                        ListView laftyView = (ListView) findViewById(R.id.listView);
                        laftyView.setAdapter(laftyAdapter);*/

                        ArrayList<File> mySongs = findSongs(Environment.getExternalStorageDirectory());
                        items = new String[mySongs.size()];

                        for(int i = 0; i < mySongs.size(); i++)
                        {
                            toast(mySongs.get(i).getName().toString());
                            items[i] = mySongs.get(i).getName().toString();
                        }

                        ListAdapter laftyAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, items);
                        ListView laftyView = (ListView) findViewById(R.id.listView);
                        laftyView.setAdapter(laftyAdapter);
                    }
                }
        );
    }
    public void toast(String text)
    {
        Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT);
    }
    public ArrayList<File> findSongs(File root) {
        ArrayList<File> al = new ArrayList<File>();
        File[] files = root.listFiles();

        for(File singleFile : files)
        {
            if(singleFile.isDirectory())
            {
                al.addAll(findSongs(singleFile));
            } else {
                if(singleFile.getName().endsWith(".mp3"))
                {

                }
            }
        }
        return al;
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}
  • What line is this failing on? – Codeman Feb 17 '15 at 19:17
  • possible duplicate of [What is a Null Pointer Exception, and how do I fix it?](http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do-i-fix-it) – Simon Feb 17 '15 at 19:33
  • @Simon it's not really a null pointer exception error, it's a permissions issue. – Codeman Feb 17 '15 at 19:35

2 Answers2

3

It's very likely you haven't added a READ_EXTERNAL_STORAGE permission to your manifest. Try adding that and your files should show up.

If you clarified what LOC is failing, I could give a more definite answer.

Codeman
  • 12,157
  • 10
  • 53
  • 91
  • @KamilKowalczyk make sure you upvote and especially mark the answer as correct if it solved your problem. – Codeman Feb 17 '15 at 19:30
0

The problem is that root.listFiles() is returning null. (I counted the line numbers from the entry into findSongs which the stack trace says is line 39 making line 63 the for loop.) As Pheonixblade9 has pointed out this is most likely a permissions issue.

That being said you should add a check to prevent this error from occurring. I would suggest adding the following code:

public ArrayList<File> findSongs(File root) {
    ArrayList<File> al = new ArrayList<File>();
    File[] files = root.listFiles();

    if(files == null) return al; // No files available.

    for(File singleFile : files)
Spencer Ruport
  • 34,865
  • 12
  • 85
  • 147