私は Android 2.1 用のシンプルな音楽アプリを書いていますが、そのような問題に遭遇しました:
私のアクティビティには、アルバム カバー、アルバム タイトル、アーティスト、および各行の曲数を含む ListView があります。これらすべての値を ContentProvider にクエリして、ListView に入れます。しかし、SDCARD の一部のアルバムにはアルバム カバーがなく、クエリは NULL を返すと思います。その結果、私の ListView には、カバーのあるアルバムがほとんどありません。
私がやりたいことは、クエリが null カバーを返す場合に、ContentProvider をクエリするとき、または他の場所に引数を入れて、既定のアイコンをアルバム カバーとして配置することです。つまり、ContentProvider がカバーとして何も返さない場合、デフォルトのアイコンをこの場所に配置したいと考えています。
ManagedCursor ではなく、他のクエリを使用する必要がありますか?
IFNULL 句 (SELECT IFNULL(title, "------") AS title FROM books;) を使用して、同様のデータベースの問題に対する解決策を見ました。何らかの形で役立つと思ったのですが、ContentProvider クエリにそのような句を入れる場所がありません。
誰もそれを行う方法を知っていますか? 以下にmuコードを入れます:
private void getAllAlbumsFromSDCARD()
{
String[] cols = { MediaStore.Audio.Albums.ALBUM, MediaStore.Audio.Albums.ALBUM_ART, MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media._ID, MediaStore.Audio.Albums.NUMBER_OF_SONGS};
Uri allAlbumsUri = MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI;
albumsCursor = this.managedQuery(allAlbumsUri, cols, null, null, MediaStore.Audio.Media.ALBUM);
// SELECT IFNULL(title, "------") AS title FROM books;
Log.d(TAG, "" +albumsCursor.getCount());
if(albumsCursor!=null)
{
Log.d(TAG, "Managing cursor");
startManagingCursor(albumsCursor);
//
String[] from = new String[] { MediaStore.Audio.Albums.ALBUM_ART, MediaStore.Audio.Albums.ALBUM, MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Albums.NUMBER_OF_SONGS };
int[] to = new int[] { R.id.cover, R.id.album, R.id.artist, R.id.count };
ListAdapter albums = new SimpleCursorAdapter(this, R.layout.album_row, albumsCursor, from, to);
this.setListAdapter(albums);
}
}