如何在后台从URL下载图像并将其加载到ImageView中的PostExecute中



我正在编写一个像Tinder这样的应用程序。在我的活动中,我初始化了一个包含所有可能匹配项的数组列表。然后在我的适配器中,我曾经使用 glide.with(context).load(url).into(ImageView) 从 ImageView 中的用户加载配置文件图像,这也完美运行,但我的适配器中的 onClickListener 不起作用。显然,问题是主线程被"冻结",因为他在图像视图中加载图像有太多工作要做。 正因为如此,我实现了一个AsyncTask,我在后台下载图像,在onPostExecute中,我将其加载到ImageView中。这也可以工作,但是当我滑动 4/5 个用户时,突然为错误的用户显示了另一个用户的图像,如果我等待几秒钟,ImageView 会以某种方式"更新"并出现正确的 ImageView。

我不知道为什么我会有这种行为,我认为也许使用位图加载图像太慢了,如果我可以在后台从 Web 下载图像并在 onPostExecute 中使用滑行加载它会起作用吗?如果有人有想法,我将不胜感激!


private List<cards> listItems;
private Context context;

public arrayAdapter(List<cards> listItems ,Context context){
this.listItems = listItems;
this.context = context;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item, viewGroup, false);
return new ViewHolder(v);
}
@SuppressLint("SetTextI18n")
@Override
public void onBindViewHolder(@NonNull final ViewHolder viewHolder, int i) {
final cards currentItem = listItems.get(i);
viewHolder.name.setText(currentItem.getName());
viewHolder.comment.setText(currentItem.getComment());
Picasso.get().load(currentItem.getProfileImageUrl()).into(viewHolder.image);
viewHolder.image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(!currentItem.getProfileImageUrl2().equals("default")){
Picasso.get().load(currentItem.getProfileImageUrl2()).into(viewHolder.image);
}
}
});
}
@Override
public int getItemCount() {
return listItems.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
TextView name, comment;
public ImageView image;
private CardView card;
private String imageUrl;

ViewHolder(@NonNull View itemView) {
super(itemView);
name = (TextView) itemView.findViewById(R.id.name);
image = (ImageView) itemView.findViewById(R.id.image);
comment = (TextView) itemView.findViewById(R.id.commentText);
card = (CardView) itemView.findViewById(R.id.card);
}
}

}


与其处理AsyncTasks,不如使用毕加索库,提供图像URL和您想要的图像视图,它将发挥魔力。

Picasso.get().load("https://i.stack.imgur.com/jEIKP.jpg").into(imageView);

有关详细信息,请查看此处:

https://square.github.io/picasso/

最新更新