Kamil Kowalczyk
Kamil Kowalczyk

Reputation: 21

Android FATAL EXCEPTION: main - Android Studio

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

Upvotes: 0

Views: 643

Answers (2)

Spencer Ruport
Spencer Ruport

Reputation: 35117

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)

Upvotes: 0

Codeman
Codeman

Reputation: 12375

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.

Upvotes: 3

Related Questions