2017-02-10 105 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; 
    } 
} 

现在你只需要绑定列表收到您的适配器类的歌曲。

相关问题