2015-01-18 2 views
-2

Мне нужно создать плейлист из sdcard, когда я запускаю свое приложение, оно генерирует попытку исключения null-указателя, чтобы получить длину нулевого массива. потому что он не смог прочитать файл с SDK. Но у меня есть файлы песен в папке эмулятора sdcard. Вот код, который я пробовал, но он не работает, пожалуйста, помогите мне исправить проблему.NullPointerException: попытка совместить длину нулевого массива

class Mp3Filter implements FilenameFilter{ 
    public boolean accept(File dir,String name) { 
     return (name.endsWith(".mp3")); 
     } 
} 
public class Audio extends ListActivity{ 
private MediaPlayer mp=new MediaPlayer(); 
private final String SD_PATH=new String("/sdcard/"); 
private List<String> songs=new ArrayList<String>(); 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.audio); 
    updatePlaylist(); 
    Button stpbtn =(Button) findViewById(R.id.stpbtn); 

    stpbtn.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      mp.stop(); 
      mp.release(); 
     } 
    }); 
} 
private void updatePlaylist() 
{ 
    try 
    { 
     File home = new File (SD_PATH); 
     if(home.listFiles(new Mp3Filter()).length > 0) 
     { 
      for(File file:home.listFiles(new Mp3Filter())) 
      { 
       songs.add(file.getName()); 
      } 
      ArrayAdapter<String> songList = new ArrayAdapter<String>(Audio.this,R.layout.song_item,songs); 
      setListAdapter(songList); 
     } 
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 
    } 
} 

вот мой audio.xml файл

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 

<ListView 
    android:id="@+id/android:list" 
    android:layout_width="match_parent" 
    android:layout_height="401dp" > 
</ListView> 

<Button 
    android:id="@+id/stpbtn" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/stpbtn" /> 

</LinearLayout> 

здесь song_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<TextView android:id="@+id/text1" xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" /> 
+0

любое исключение следа? Какая линия? – SMA

+0

это показано в строке 45. где оператор if пытается сравнить с длиной массива. – devendrak353

ответ

2

От JavaDoc for File.listFiles(FileFilter):

массив будет пустым, если каталог пуст. Возвращает null, если это абстрактное имя пути не обозначает каталог, или если возникает ошибка ввода-вывода.

Так что вам нужно это явно проверить.

File home = new File (SD_PATH); 
File[] listOfFiles = home.listFiles(new Mp3Filter()); 
if(listOfFiles != null && listOfFiles.length > 0) { 
    ... 
} 

И/Или работа в проверке, что файл на самом деле каталог:

File home = new File (SD_PATH); 
if(!home.isDirectory()) { 
    // Error case, handle it. 
} 
Смежные вопросы