Java Glide+的图像错误;Recyclerview和MediaStore.Audio.Media.ALBUM\u ID

Java Glide+的图像错误;Recyclerview和MediaStore.Audio.Media.ALBUM\u ID,java,android,android-recyclerview,picasso,android-glide,Java,Android,Android Recyclerview,Picasso,Android Glide,我使用此方法加载图像并将其保存到arraylist: public ArrayList<Song> getMusic(){ ArrayList<Song> list = new ArrayList<>(); Cursor cursor = resolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null,

我使用此方法加载图像并将其保存到arraylist:

public ArrayList<Song> getMusic(){
    ArrayList<Song> list = new ArrayList<>();
    Cursor cursor = resolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
            null,
            null,
            null,
            MediaStore.MediaColumns.TITLE+" ASC");
    if(cursor!=null && cursor.moveToFirst()){
        int id = cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID);
        int title = cursor.getColumnIndex(MediaStore.Audio.Media.TITLE);
        int artist = cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST);
        int album = cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM);
        do{
            Song song = new Song(cursor.getString(id),
                    cursor.getString(title),
                    cursor.getString(artist),
                    cursor.getString(album));
            list.add(song);
        }while(cursor.moveToNext());
        cursor.close();
    }
    return list;
}
我得到了这个结果:

问题是箭头所在的位置有一个不应该出现的图像。该图像是从我的照片库加载的

我在recyclerView中找到了使用毕加索的解决方案,该代码具有相同的URI:

Picasso.get().load(uri)
                .into(this.thumb);
但当然,当我滚动视图时,图像的大小是完全的,有时会变得稍微滞后。结果是:

正如你所看到的,第二张图片完全按照我的意愿加载,但是当我添加一张大小为“Picasso.resize(sizeX,sizeY)”的图片时,它看起来就像我发布的第一张图片

因此,我想知道是否有任何方法可以使用Glide加载相册图像,因为在我的例子中,对应用程序进行评测,它在内存管理方面工作得更好

编辑(这是歌曲适配器):

公共类SongAdapter扩展了RecyclerView。适配器实现了SectionTitleProvider{
私有数组列表;
私人监听;
private int type;//0表示列表,1表示网格
公共SongAdapter(ArrayList列表、int类型、侦听器){
this.list=列表;
this.listener=listener;
this.type=type;
}
@非空
@凌驾
public ViewHolder onCreateViewHolder(@NonNull ViewGroup ViewGroup,int i){
视图;
如果(类型==0){
view=LayoutInflater.from(viewGroup.getContext()).flate(R.layout.music_项,null,false);
}否则{
view=LayoutInflater.from(viewGroup.getContext()).flate(R.layout.music\u item\u grid,null,false);
}
返回新的ViewHolder(视图);
}
@凌驾
public void onBindViewHolder(@NonNull ViewHolder ViewHolder,int i){
设置数据(i,侦听器);
}
@凌驾
public int getItemCount(){
返回list.size();
}
@凌驾
公共字符串getSectionTitle(int位置){
返回list.get(position.getTitle().substring(0,1);
}
公共类ViewHolder扩展了RecyclerView.ViewHolder{
私人TextView音乐,艺术家;
私用图像查看拇指;
私人图像按钮更多;
公共视图持有者(@NonNull View itemView){
超级(项目视图);
music=itemView.findviewbyd(R.id.textMusic);
艺术家=itemView.findViewById(R.id.textArtister);
thumb=itemView.findviewbyd(R.id.musicThumb);
more=itemView.findviewbyd(R.id.musicOption);
}
公共void setData(int i,最终侦听器){
最终歌曲=list.get(i);
music.setText(song.getTitle());
artist.setText(song.getArtist());
/*
使用(项目视图)滑动
.load(uri)
.插入(拇指);
*/
Uri=Uri.withAppendedPath(Uri.parse(“content://media/external/audio/albumart),song.getId());
Picasso.get().load(uri)
.进入(这个拇指);
setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(最终视图v){
最终弹出菜单弹出=新弹出菜单(v.getContext(),更多);
弹出。充气(右菜单。宋_菜单);
setOnMenuItemClickListener(新的PopupMenu.OnMenuItemClickListener(){
@凌驾
公共布尔onMenuItemClick(菜单项){
开关(item.getItemId()){
案例R.id.音乐\u菜单\u播放:
返回true;
案例R.id.音乐\u菜单\u添加队列:
返回true;
案例R.id.音乐\u菜单\u添加播放列表:
返回true;
案例R.id.音乐\u菜单\u共享:
返回true;
违约:
返回菜单项单击(项目);
}
}
});
popup.show();
}
});
itemView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
监听者:麦克利克(歌曲);
}
});
}
}
公共接口侦听器{
(宋歌);
}

}

您可以邮寄您的适配器吗?我认为问题不在于滑翔。它与适配器有关。当你上下滚动
RecyclerView
几次时,毕加索也会遇到类似的问题。你能发布你的适配器吗?我认为问题不在于滑翔。它与适配器有关。当你上下滚动几次
RecyclerView
时,毕加索也会遇到类似的问题。
Picasso.get().load(uri)
                .into(this.thumb);
public class SongAdapter extends RecyclerView.Adapter<SongAdapter.ViewHolder> implements SectionTitleProvider {

private ArrayList<Song> list;
private onItemClickListener listener;
private int type; // 0 for list, 1 for grid

public SongAdapter(ArrayList<Song> list, int type, onItemClickListener listener){
    this.list = list;
    this.listener = listener;
    this.type = type;
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View view;
    if(type==0){
        view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.music_item,null,false);
    }else{
        view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.music_item_grid,null,false);
    }
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
    viewHolder.setData(i, listener);
}

@Override
public int getItemCount() {
    return list.size();
}

@Override
public String getSectionTitle(int position) {
    return list.get(position).getTitle().substring(0,1);
}

public class ViewHolder extends RecyclerView.ViewHolder {

    private TextView music, artist;
    private ImageView thumb;
    private ImageButton more;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);
        music = itemView.findViewById(R.id.textMusic);
        artist = itemView.findViewById(R.id.textArtist);
        thumb = itemView.findViewById(R.id.musicThumb);
        more = itemView.findViewById(R.id.musicOption);
    }

    public void setData(int i, final onItemClickListener listener){
        final Song song = list.get(i);
        music.setText(song.getTitle());
        artist.setText(song.getArtist());

        /*
        Glide.with(itemView)
                .load(uri)
                .into(thumb);
                */

        Uri uri = Uri.withAppendedPath(Uri.parse("content://media/external/audio/albumart"), song.getId());
        Picasso.get().load(uri)
                .into(this.thumb);

        more.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(final View v) {
                 final PopupMenu popup = new PopupMenu(v.getContext(), more);
                 popup.inflate(R.menu.song_menu);
                 popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                     @Override
                     public boolean onMenuItemClick(MenuItem item) {
                         switch (item.getItemId()){
                             case R.id.music_menu_playnow:
                                 return true;
                             case R.id.music_menu_addqueue:
                                 return true;
                             case R.id.music_menu_addplaylist:
                                 return true;
                             case R.id.music_menu_share:
                                 return true;
                             default:
                                 return onMenuItemClick(item);
                         }
                     }
                 });

                 popup.show();
             }
         });
         itemView.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
                 listener.onItemClick(song);
             }
         });
    }
}

public interface onItemClickListener{
    void onItemClick(Song song);
}