我一直在将METADATA_KEY_TITLE
.mp3 文件提取到 arraylist 和 arrayadaper 以使我的 ListView 仅显示歌曲的标题,并且在标题为空的特殊情况下,标题元素返回文件名...这是我的代码:
final ArrayList<String> myTitu = findTitles(Environment.getExternalStorageDirectory());
metaTitu = new String[myTitu.size()];
for(int j = 0; j<myTitu.size(); j++){
metaTitu[j] = myTitu.get(j);
}
ArrayAdapter<String> adp = new ArrayAdapter<String>(getContext(),R.layout.songslist_content,R.id.name_of_song_tab, metaTitu);
lv.setAdapter(adp);
// -------------------------------------------------------------------------------
public ArrayList<String> findTitles(File root) {
ArrayList<String> all = new ArrayList<String>();
File[] files = root.listFiles();
String names;
for (File singlet : files) {
if (singlet.isDirectory() && !singlet.isHidden()) {
all.addAll(findTitles(singlet));
} else {
if (singlet.getName().endsWith(".mp3")){
try{
metameta = new MediaMetadataRetriever();
metameta.setDataSource(singlet.getPath());
names = metameta.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
all.add(names);
} catch (Exception e){
names = singlet.getName().toString();
all.add(names);
}
}
}
}
return all;
}
请注意,所有这些都在一个片段中,并且调试器也会抱怨
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.toString()' on a null object reference
不指向任何特定的行