如何从JSON数据在RecyclerView适配器中设置图像?

时间:2018-08-11 10:31:02

标签: android android-recyclerview fresco

我正在尝试使用Fresco库将图像(从JSON数据检索)加载到RecyclerView中的每个项目中。对于每个项目,仅显示占位符图像,而不显示我想要的URL中的图像。

我在BookListAdapter构造函数中有data(iris) lmfunction(iris,Sepal.Length,Petal.Length,1:150) Error in eval(predvars, data, env) : object 'Sepal.Length' not found ,在ViewHolder构造函数中有Fresco.initialize(mContext);。我的所有其他JSON数据都显示在RecyclerView CardView项目中。

draweeView = view.findViewById(R.id.bookCoverDrawee

Log.d语句显示URL正确,但是未将图像设置为URL中的图像。

在logcat中,它确实说Fresco已经被初始化了,但是我不知道要把它放在哪里(我试图在另一个类和ViewHolder构造函数中初始化适配器的地方初始化它)。我也尝试过使用毕加索(因为不需要我对其进行初始化),但是没有任何显示。看着Fresco's RecyclerView adapter sample,我不知道自己在做什么错。

如果可以使用,我不介意使用其他库。

请让我知道是否需要更多信息。预先感谢!

更新:根据要求添加了XML

 @Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
    Book book = bookList.get(i);
    viewHolder.singleListRowBinding.setBook(book);

    Log.d(TAG, "Image URL: " + book.getStrImageURL());

    if (book.getStrImageURL() != null) {
        Uri uri = Uri.parse(book.getStrImageURL());
        viewHolder.draweeView.setImageURI(uri);
    }
}

完整文件:

single_list_row.xml (pastebin)

BookListAdapter.java (pastebin)

1 个答案:

答案 0 :(得分:0)

 @Override
    public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
        Book book = bookList.get(i);
        viewHolder.singleListRowBinding.setBook(book);

        Log.d(TAG, "Image URL: " + book.getStrImageURL());

        if (book.getStrImageURL() != null) {
            Uri imageUri = Uri.parse(book.getStrImageURL());
    ImageRequest request = ImageRequest.fromUri(imageUri);
    DraweeController controller = Fresco.newDraweeControllerBuilder().setImageRequest(request).setOldController( viewHolder.draweeView.getController()).build();
   viewHolder.draweeView.setController(controller);
  }
 }