我試圖提取一種方法,將歌曲信息返回給一個新類,以便我可以從多個類中調用它的實例。Java Android:如何提取上下文作爲參數的方法
的方法:
public int getSongList(ContentResolver resolver){
//retrieve song info
ContentResolver musicResolver = resolver;
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());
}
return 0;
}
假設上述方法被放置在MainActivity。下面是我試圖從一個片段實例化它。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreateView(inflater,container,savedInstanceState);
View rootView = inflater.inflate(R.layout.library_songs, container, false);
this.mView = rootView;
songView = (ListView) mView.findViewById(R.id.song_list);
songList = new ArrayList<Song>();
new MainActivity().getSongList(mView.getContext().getContentResolver())
Collections.sort(songList, new Comparator<Song>(){
public int compare(Song a, Song b){
return a.getTitle().compareTo(b.getTitle());
}
});
SongAdapter songAdt = new SongAdapter(mView.getContext(), songList);
songView.setAdapter(songAdt);
return rootView;
}
錯誤:
顯示java.lang.NullPointerException:嘗試在上一個空對象引用 調用虛擬方法 '布爾java.util.ArrayList.add(java.lang.Object中)' com.auxiline.audioscope.MainActivity.getSongList(MainActivity.java:219)