Picasso ไม่ทำงานกับ Recycler View ใน Android

ฉันพัฒนาโปรแกรมอ่าน RSS แบบธรรมดา และฉันต้องการแสดงชื่อและรูปภาพของแต่ละโพสต์ในมุมมองการรีไซเคิล

มีที่ที่ฉันใช้ Picasso เพื่อโหลดภาพจาก ArrayList :

public void onBindViewHolder(ViewHolder viewHolder, int i) {
    RssItem item = rssItems.get(i);
    Picasso.with(F.context).load(item.imageLink).into(viewHolder.postImage);
    viewHolder.postTitle.setText(item.title);
    viewHolder.postAuthor.setText(item.postWriter);
    viewHolder.postDate.setText(item.pubDate);
}

แต่มันใช้งานไม่ได้ ! ฉันทดสอบ Picasso ด้วย URL เดียวและทำงานได้อย่างถูกต้อง แต่เมื่อตั้งค่าลิงก์รูปภาพในรายการอาร์เรย์ จะไม่ทำงาน


person Farzad Farazmand    schedule 06.02.2015    source แหล่งที่มา
comment
ตรวจสอบให้แน่ใจว่า rssItems มีรายการที่ถูกต้อง เช่น URL ของรายการไม่ว่างเปล่า และสามารถโหลดรูปภาพได้ เช่น ผ่านเว็บเบราว์เซอร์   -  person aga    schedule 06.02.2015
comment
ฉันตรวจสอบว่า มีที่อยู่ที่ถูกต้องใน rssItems และทั้งหมดนั้นใช้งานได้ เมื่อฉันใช้ Picasso กับหนึ่งในที่อยู่จาก rssItem ( Like :Picasso.with(F.context).load(example.com).into(viewHolder.postImage); ) ใช้งานได้ แต่เมื่อฉันตั้งค่า item.imageLink มันไม่ทำงาน   -  person Farzad Farazmand    schedule 06.02.2015
comment
โปรดอธิบายให้ครบถ้วนและชัดเจนว่าสิ่งนี้ใช้งานไม่ได้หมายความว่าอย่างไร   -  person CommonsWare    schedule 06.02.2015
comment
หมายความว่า Picasso ไม่ดาวน์โหลดภาพ !   -  person Farzad Farazmand    schedule 06.02.2015
comment
ตรวจสอบบทแนะนำนี้เพื่อดูวิธีการ เพื่อโหลดรูปภาพใน recyclerview โดยใช้ไลบรารีของ Picasso   -  person Navneet Krishna    schedule 06.01.2019


คำตอบ (6)


ฉันมีปัญหาเดียวกันเมื่อต้องการโหลดรูปภาพจาก URL ด้วย API ใน RecyclerView.Adapter และ RecyclerView.ViewHolder แบบขยาย

ก่อนอื่น คุณต้องตรวจสอบว่า URL อาจไม่ว่างเปล่าหรือเป็นโมฆะ จากนั้นจึงโหลดด้วย Picasso

@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
      RssItem item = rssItems.get(i);
      if(item.imageLink!=null && !item.imageLink.isEmpty()) {
          Picasso.with(F.context)
              .load(item.imageLink)
              .placeholder(R.drawable.default_placeholder)
              .error(R.drawable.error_placeholder)
              // To fit image into imageView
              .fit()
              // To prevent fade animation
              .noFade()
              .into(viewHolder.postImage);
     } else {  
          viewHolder.postImage.setImageDrawable(ContextCompat.getDrawable(F.context,R.drawable.default_placeholder));
     }
     viewHolder.postTitle.setText(item.title);
     viewHolder.postAuthor.setText(item.postWriter);
     viewHolder.postDate.setText(item.pubDate);
}

ในที่สุดคุณจะต้องตระหนักถึง viewHolder.postImage และวิธีการค้นพบมัน อาจเป็นโมฆะหรือไม่พบมุมมองตามรหัสอย่างถูกต้อง

person KeyOne    schedule 28.06.2016

คุณเคยเห็นบทความนี้หรือไม่ มันเกี่ยวกับ RecyclerView ผู้เขียนใช้ Picasso ในอะแดปเตอร์

@Override
public void onBindViewHolder(FeedListRowHolder feedListRowHolder, int i) {
    FeedItem feedItem = feedItemList.get(i);

    Picasso.with(mContext).load(feedItem.getThumbnail())
            .error(R.drawable.placeholder)
            .placeholder(R.drawable.placeholder)
            .into(feedListRowHolder.thumbnail);

    feedListRowHolder.title.setText(Html.fromHtml(feedItem.getTitle()));
}
person LissF    schedule 08.04.2015

ใช้เพียงรหัสง่ายๆ:

 @Override
    public void onBindViewHolder(ShivaViewholder holder, int position) {
    Picasso.get().load("http://i.imgur.com/DvpvklR.png").into(holder.imageView2);
    }

แต่ถ้าคุณต้องการรูปภาพเป็นไอคอนด้วย หรือต้องการตำแหน่ง เราจะใช้โค้ดเพิ่มเติมในโค้ดนี้

person Pradeep Sheoran    schedule 09.08.2018

ฉันติดอยู่กับสิ่งนี้มาระยะหนึ่งแล้ว แต่ก็จัดเรียงได้หลังจากอ่านแหล่งข้อมูลออนไลน์ นี่คือสิ่งที่คุณต้องทำซึ่งได้ผลสำหรับฉัน ฉันจะแก้ปัญหาการโหลดรูปภาพใน imageview ที่คุณได้ประกาศไว้ในคลาส ViewHolder ของคุณ

public void onBindViewHolder(ViewHolder viewHolder, int i) {
    Context context = viewHolder.postImage.getContext(); //<----- Add this line
    RssItem item = rssItems.get(i);

    //change context here
    Picasso.with(context).load(item.imageLink).into(viewHolder.postImage);

    viewHolder.postTitle.setText(item.title);
    viewHolder.postAuthor.setText(item.postWriter);
    viewHolder.postDate.setText(item.pubDate);
}

นี่คือสิ่งที่ใช้ได้ผลสำหรับฉันและฉันหวังว่ามันจะได้ผลสำหรับคุณเช่นกัน ขอให้โชคดี.

person Prateek Raina    schedule 23.10.2016

โปรดทราบว่าคุณต้องมีการตั้งค่านี้ในรายการ Android ของคุณเพื่อให้ Picasso โหลดรูปภาพผ่าน url อัปเดตเป็นคำตอบ:

เพื่อให้ Picasso โหลดภาพจาก URL เช่น https://picsum.photos/900/900?image=0 จำเป็นต้องมีสิทธิ์ที่ถูกต้อง ซึ่งคุณต้องตั้งค่าในไฟล์รายการ Android ของคุณ....ดังนั้นใน java คุณจะมี:

Picasso.get().load("http://i.imgur.com/DvpvklR.png").into(imageView);

แต่สิ่งนี้อาจไม่โหลดรูปภาพใด ๆ และดูเหมือนว่า Picasso ไม่ทำงาน.. ดังนั้นคุณต้องอัปเดต AndroidManifest.xml และใต้แท็กรายการที่คุณเพิ่มต่อไปนี้...:

<uses-permission android:name="android.permission.INTERNET" />
person Linda Gcaba    schedule 29.03.2019
comment
สิ่งนี้ต้องการข้อมูลเพิ่มเติมเพื่อให้คนทั่วไปเข้าใจได้ - person elbrant; 30.03.2019
comment
อัปเดตคำตอบพร้อมรายละเอียดเพิ่มเติม .. สำหรับฉันมันเป็นเพียงเรื่องของการอัปเดตการอนุญาต เพื่อให้ปิกัสโซทำงาน - person Linda Gcaba; 30.03.2019

หากคุณกำลังโหลดภาพจากอินเทอร์เน็ต - ตรวจสอบให้แน่ใจว่าคุณได้เพิ่มการอนุญาตสำหรับอินเทอร์เน็ตใน AndroidManifest.xml ของคุณ:

<uses-permission android:name="android.permission.INTERNET"/>
person KirillParfenov    schedule 27.10.2019