2016-10-21 9 views
-3

У меня возникло расстраивающее время извлечения файлов METADATA_KEY_TITLE из .mp3 в arraylist и arrayadaper для моего списка ListView для отображения только названий песен и в случаях с исключительным случаем, когда заголовок имеет значение null, элемент title возвращает имя файла ... Вот мой код:Ошибка в Mediametadata в ArrayAdapter

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; 
} 

(. Ps пожалуйста, голые со мной, я только новичок в Android)

Пожалуйста, обратите внимание, что все это в фрагменте, а также отладчик жалуется на

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.toString()' on a null object reference 

без указания какой-либо конкретной линии

ответ

1

Прежде всего, проверить, является ли объект файла singlet не null и добавить null проверки перед сопоставлением расширения с .mp3 тоже. Вы получаете исключение нулевого указателя, потому что не проверяете значение null внутри вашего метода catch.

Так что ваш код будет выглядеть следующим образом:

for (File singlet : files) { 
     if (null != singlet) { 
      if (singlet.isDirectory() && !singlet.isHidden()) { 
       all.addAll(findTitles(singlet)); 
      } else { 
       if (null != singlet.getName() && 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){ 
         e.printStackTrace(); 
        } 
       } 
      } 
     } 
    } 
+0

Не работает до сих пор. Я получаю ту же ошибку в отладчике, говоря, что java.string.tostring имеет значение null –

+0

Я пытаюсь экспериментировать с другими методами, связывающими данные массива с картой , затем передаю его в SimpleAdapter –

+0

Передача его в SimpleAdapter вместо ArrayAdapter .... надеюсь, это работает –

 Смежные вопросы

  • Нет связанных вопросов^_^