0
私は、リストビュー内の曲のカバーを表示するには、このコードを使用しています:アルバムのカバーを表示するには?
package com.xrobotx.love.musicalbums;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.bumptech.glide.Glide;
public class SongAdapter extends BaseAdapter {
private List<Song> songs;
private LayoutInflater songInf;
Context mContext;
public SongAdapter(Context c, List<Song> theSongs){
songs=theSongs;
songInf=LayoutInflater.from(c);
mContext = c;
}
@Override
public int getCount() {
return songs.size();
}
@Override
public Object getItem(int arg0) {
return songs.get(arg0);
}
@Override
public long getItemId(int arg0) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//map to song layout
RelativeLayout songLay = (RelativeLayout)songInf.inflate
(R.layout.song_layout, parent, false);
//get title and artist views
TextView songView = (TextView)songLay.findViewById(R.id.song_title);
TextView artistView = (TextView)songLay.findViewById(R.id.song_artist);
TextView durationView = (TextView)songLay.findViewById(R.id.song_duration);
ImageView coverView = (ImageView)songLay.findViewById(R.id.song_cover);
//get song using position
Song currSong = songs.get(position);
//get title and artist strings
songView.setText(currSong.getTitle());
artistView.setText(currSong.getArtist());
durationView.setText(String.format("%02d:%02d",
TimeUnit.MILLISECONDS.toMinutes((long) currSong.getDuration()),
TimeUnit.MILLISECONDS.toSeconds((long) currSong.getDuration()) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) currSong.getDuration()))));
if(currSong.getCover() != null){
Glide.with(mContext).load(currSong.getCover()).override(50, 50).into(coverView);
}
songLay.setTag(position);
return songLay;
}
}
すべてのカバーが正しく表示されるわけではありません。いくつかのカバーは黒です。 なぜですか?
EDIT:
private static String getCoverArtPath(long albumId, Context context) {
Cursor albumCursor = context.getContentResolver().query(
MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,
new String[]{MediaStore.Audio.Albums.ALBUM_ART},
MediaStore.Audio.Albums._ID + " = ?",
new String[]{Long.toString(albumId)},
null
);
boolean queryResult = albumCursor.moveToFirst();
String result = null;
if (queryResult) {
result = albumCursor.getString(0);
}
albumCursor.close();
return result;
}
'Glide'コードは問題ありません。すべての画像が利用可能であることを確認しましたか? 'Glide.with(mContext).load(currSong.getCover()).aller(50、50).error(R.drawable.errorDrawable).into(coverView);'エラーがあるかどうかを調べる読み込み中に –
カバーのURLが黒い画像を返すことがあります。すべてのcyrrSon.getCover()が有効な画像を返すことを確かめますか? –
@DrilonBlakqoriあなたのコードを使用すると、黒い画像は表示されず、R.drawable.errorDrawable画像が表示されます。それでエラーはありますか?ただし、一部の画像は正しく表示されます。たぶん私はキャッシュをクリアする必要がありますか? – xRobot