2016-10-21 4 views
-3

タイトルリストがnullで、タイトル要素がファイル名を返す例外的なケースでのみ、リストビューのためにarraylistとarrayadaperに.mp3ファイルのMETADATA_KEY_TITLEを抽出するのに楽しい時間を過ごしています...ここで は私のコードです:ArrayAdapterでMediametadataエラーが発生しました

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

まずポインティングせずに、ファイルオブジェクトsingletnullではなく、あまりにも.mp3と拡張子に一致する前にnullチェックを追加するかどうかを確認してください。 nullの値がのメソッド内にないかどうかをチェックしていないため、NULLポインタ例外が発生しています。

次のようにだからあなたのコードは次のようになります。

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

ArrayAdapterではなくSimpleAdapterに渡します。うまくいけばうまくいく –

関連する問題