Picasso tidak bekerja dengan Recycler View di android

Saya mengembangkan pembaca RSS sederhana dan saya ingin menampilkan judul dan gambar setiap posting dalam tampilan pendaur ulang.

Di sanalah saya menggunakan Picasso untuk memuat gambar dari 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);
}

tapi itu tidak berhasil! Saya menguji Picasso dengan satu url dan berfungsi dengan benar, tetapi ketika mengatur tautan gambar dalam daftar array, itu tidak berfungsi.


person Farzad Farazmand    schedule 06.02.2015    source sumber
comment
Pastikan rssItems berisi item yang valid, yaitu urlnya tidak kosong dan gambar dapat dimuat, misalnya melalui browser web.   -  person aga    schedule 06.02.2015
comment
Saya memeriksanya, ada alamat yang valid di rssItems dan semuanya berfungsi, ketika saya menggunakan Picasso dengan salah satu alamat dari rssItem ( Seperti :Picasso.with(F.context).load(example.com).into(viewHolder.postImage); ) berfungsi, tetapi ketika saya menyetel item.imageLink , tidak berfungsi.   -  person Farzad Farazmand    schedule 06.02.2015
comment
Mohon penjelasannya secara lengkap dan tepat apa maksudnya tidak work.   -  person CommonsWare    schedule 06.02.2015
comment
berarti picasso tidak mengunduh gambar!   -  person Farzad Farazmand    schedule 06.02.2015
comment
lihat tutorial ini untuk mengetahui caranya untuk memuat gambar di tampilan pendaur ulang menggunakan perpustakaan picasso   -  person Navneet Krishna    schedule 06.01.2019


Jawaban (6)


Saya mengalami masalah yang sama ketika saya ingin memuat gambar dari URL-nya dengan API di RecyclerView.Adapter dan RecyclerView.ViewHolder yang diperluas.

Pertama-tama, Anda harus memeriksa apakah URL tersebut tidak kosong atau nol, lalu memuatnya dengan 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);
}

Terakhir, Anda harus mengetahui viewHolder.postImage dan cara menemukannya. Mungkin tampilannya nol atau tidak ditemukan berdasarkan id dengan benar.

person KeyOne    schedule 28.06.2016

Pernahkah Anda melihat artikel ini? Ini tentang RecyclerView. Penulis menggunakan Picasso sebagai adaptor.

@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

gunakan hanya kode sederhana:

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

Namun jika Anda juga menginginkan gambarnya di icon, atau menginginkan lokasinya maka kami akan menggunakan beberapa kode tambahan pada kode ini.

person Pradeep Sheoran    schedule 09.08.2018

Saya terjebak dengan hal ini selama beberapa waktu tetapi menyelesaikannya setelah membaca sumber online. Inilah yang perlu Anda lakukan dan berhasil untuk saya. Saya hanya akan menyelesaikan masalah Anda dalam memuat gambar dalam tampilan gambar yang telah Anda deklarasikan di kelas ViewHolder Anda.

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);
}

Inilah yang berhasil bagi saya dan saya harap ini juga berhasil untuk Anda. Semoga beruntung.

person Prateek Raina    schedule 23.10.2016

Sekadar catatan, Anda perlu memiliki pengaturan ini di manifes Android Anda agar Picasso memuat gambar apa pun melalui url. Pembaruan pada jawabannya:

Agar Picasso memuat gambar dari url misalnya. https://picsum.photos/900/900?image=0. Itu harus memiliki izin yang tepat, yang perlu Anda atur di file manifes Android Anda....Jadi di java Anda, Anda akan memiliki:

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

tapi ini mungkin tidak memuat gambar apa pun dan sepertinya Picasso tidak berfungsi..jadi Anda harus memperbarui AndroidManifest.xml dan tepat di bawah tag manifes Anda menambahkan yang berikut...:

<uses-permission android:name="android.permission.INTERNET" />
person Linda Gcaba    schedule 29.03.2019
comment
Ini memerlukan lebih banyak informasi agar rata-rata orang dapat memahaminya. - person elbrant; 30.03.2019
comment
perbarui jawabannya dengan lebih detail..bagi saya itu hanya masalah memperbarui izin. untuk membuat Picasso bekerja. - person Linda Gcaba; 30.03.2019

Jika Anda memuat gambar dari internet - pastikan Anda telah menambahkan izin untuk INTERNET di AndroidManifest.xml Anda:

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