2017-02-10 104 views
-1

我寫了這段代碼,但是當我啓動應用程序時,它不幸停止了。我正在使用Android Studio。如何在列表視圖中獲取SD卡歌曲並在android中顯示在列表視圖中?

public class AllMusicDemo extends AppCompatActivity { 
    String []album; 
    String []name; 
    String []concat; 
    ListView listmusic; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_all_music_demo); 
     listmusic= (ListView) findViewById(R.id.listmusic); 
     Uri uri= MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 

     Cursor cursor= getContentResolver().query(uri, 
       new String[]{MediaStore.Audio.Media.ALBUM, 
       MediaStore.Audio.Media.ARTIST, 
       MediaStore.Audio.Media.COMPOSER, 
         MediaStore.Audio.Media.DURATION, 
       MediaStore.Audio.Media.DISPLAY_NAME, 
       MediaStore.Audio.Media.SIZE, 
         MediaStore.Audio.Media.DATA} 
     , null, null, null); 
     album=new String[cursor.getCount()]; 
     name=new String[cursor.getCount()]; 
     cursor.moveToFirst(); 
     for (int i= 0; i< cursor.getCount(); i++){ 


      album[i]= cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM)); 
      name[i]=cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME)); 
      concat[i]=album[i]+" "+name[i]; 
      cursor.moveToNext(); 
     } 
     ArrayAdapter<String> arrayAdapter=new ArrayAdapter<String>(AllMusicDemo.this, android.support.v7.appcompat.R.layout.support_simple_spinner_dropdown_item,concat); 
     listmusic.setAdapter(arrayAdapter); 
    } 
} 
+0

請提供您正在談論的應用程序崩潰堆棧跟蹤。 – dasar

+0

'在列表視圖中播放sdcard歌曲並在列表視圖中顯示'。你有兩個列表視圖? – greenapps

+0

請檢查這一行代碼cursor.getCount();它的計數爲0,這意味着循環迭代不會導致concat []數組初始化 –

回答

0

您可以獲取歌曲列表如下:

public static ArrayList<MediaItem> listOfSongs(Context context){ 
     Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
     Cursor c = context.getContentResolver().query(uri, null, MediaStore.Audio.Media.IS_MUSIC + " != 0", null, null); 
     ArrayList<MediaItem> listOfSongs = new ArrayList<MediaItem>(); 
     c.moveToFirst(); 
     while(!c.isAfterLast()){ 
      MediaItem songData = new MediaItem(); 

      String title = c.getString(c.getColumnIndex(MediaStore.Audio.Media.TITLE)); 
      String artist = c.getString(c.getColumnIndex(MediaStore.Audio.Media.ARTIST)); 
      String album = c.getString(c.getColumnIndex(MediaStore.Audio.Media.ALBUM)); 
      long duration = c.getLong(c.getColumnIndex(MediaStore.Audio.Media.DURATION)); 
      String data = c.getString(c.getColumnIndex(MediaStore.Audio.Media.DATA)); 
      long albumId = c.getLong(c.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID)); 
      String composer = c.getString(c.getColumnIndex(MediaStore.Audio.Media.COMPOSER)); 

      songData.setTitle(title); 
      songData.setAlbum(album); 
      songData.setArtist(artist); 
      songData.setDuration(duration); 
      songData.setPath(data); 
      songData.setAlbumId(albumId); 
      songData.setComposer(composer); 
      listOfSongs.add(songData); 

      c.moveToNext(); 
     } 
     c.close(); 
     Log.d("SIZE", "SIZE: " + listOfSongs.size()); 
     return listOfSongs; 
    } 

其中MediaItem是保存你的歌曲的詳細信息類:

public class MediaItem { 
    String title; 
    String artist; 
    String album; 
    String path; 
    long duration; 
    long albumId; 
    String composer; 

    @Override 
    public String toString() { 
     return title; 
    } 

    public String getTitle() { 
     return title; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
    } 

    public String getArtist() { 
     return artist; 
    } 

    public void setArtist(String artist) { 
     this.artist = artist; 
    } 

    public String getAlbum() { 
     return album; 
    } 

    public void setAlbum(String album) { 
     this.album = album; 
    } 

    public String getPath() { 
     return path; 
    } 

    public void setPath(String path) { 
     this.path = path; 
    } 

    public long getDuration() { 
     return duration; 
    } 

    public void setDuration(long duration) { 
     this.duration = duration; 
    } 

    public long getAlbumId() { 
     return albumId; 
    } 

    public void setAlbumId(long albumId) { 
     this.albumId = albumId; 
    } 

    public String getComposer() { 
     return composer; 
    } 

    public void setComposer(String composer) { 
     this.composer = composer; 
    } 
} 

現在你只需要綁定列表收到您的適配器類的歌曲。

相關問題