Reputation: 21
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
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
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