试图在片段中获取歌曲列表会产生nullpointerexception

时间:2016-09-20 08:31:33

标签: java android android-fragments audio-player android-music-player

我想检索我用于标签式用户界面的片段中的歌曲列表。

public void getSongList(){
    ContentResolver musicResolver = getActivity().getContentResolver();
    Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null);

    if(musicCursor!=null && musicCursor.moveToFirst()){
        //get columns
        int titleColumn = musicCursor.getColumnIndex
                (android.provider.MediaStore.Audio.Media.TITLE);
        int idColumn = musicCursor.getColumnIndex
                (android.provider.MediaStore.Audio.Media._ID);
        int artistColumn = musicCursor.getColumnIndex
                (android.provider.MediaStore.Audio.Media.ARTIST);
        //add songs to list
        do {
            long thisId = musicCursor.getLong(idColumn);
            String thisTitle = musicCursor.getString(titleColumn);
            String thisArtist = musicCursor.getString(artistColumn);
            songList.add(new Song(thisId, thisTitle, thisArtist));
        }
        while (musicCursor.moveToNext());
    }

//        musicCursor.close();
}

我收到了songList.add()的NullPointerException,songList是已定义的ArrayList。

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.util.ArrayList.add(java.lang.Object)' on a null object reference
                                                                at com.musi.musi2.Tracks.getSongList(Tracks.java:60)

有人可以帮助我知道可能是什么原因吗?或者是否还有其他方法可以做到这一点。

此外,代码在MainActivity中使用时可以使用,而不是片段

P.S。我正在用手机测试应用程序,手机里有歌曲。

编辑:这不是重复的"什么是NullPointerException",我知道什么是好的,我的代码在MainActivity中使用getSongList()方法时工作,我想知道原因

1 个答案:

答案 0 :(得分:0)

使用以下代码:

public void getSongList(){
songList = new ArrayList<>; 

...

}