There is a RecyclerView list that has two items: TextView and ImageView . ImageView has a default image, TextView contains url for different pictures on the Internet, Textview filled with data from a AsyncTask using AsyncTask . It is necessary that after creating the RecyclerView list instead of the default picture, the picture is loaded by a specific link. After creating the adapter, I try to fill the ImageView with data using Picasso, but I get an error: Illegalstateexception target host is null .
There is an option to upload a picture in ViewHolder , in the onBindViewHolder method, but then if you have a bad internet connection, the application download takes too long, which does not work. It is necessary that it is filled with a standard picture, and then loaded.
ListItem.java
public class ListItem { private String head; private String desc; private Drawable webSiteImage; private List<String> headList; private List<String> urlList; private List<String> imgUrlList; private String imgUrl; public ListItem() { } public String getHead() { return head; } public String getDesc() { return desc; } public void setHead(String head) { this.head = head; } public void setDesc(String desc) { this.desc = desc; } public List<String> getHeadList() { return headList; } public List<String> getUrlList() { return urlList; } public void setHeadList(List<String> headList) { this.headList = headList; } public void setUrlList(List<String> urlList) { this.urlList = urlList; } public String getImgUrl() { return imgUrl; } public void setImgUrl(String imgUrl) { this.imgUrl = imgUrl; } public List<String> getImgUrlList() { return imgUrlList; } public void setImgUrlList(List<String> imgUrlList) { this.imgUrlList = imgUrlList; } public Drawable getWebSiteImage() { return webSiteImage; } public void setWebSiteImage(Drawable webSiteImage) { this.webSiteImage = webSiteImage; } } MyRecViewAdapter.java adapter
public class MyRecViewAdapter extends RecyclerView.Adapter<MyRecViewAdapter.ViewHolder>{ private List<ListItem> listItems; private Context context; public static class ViewHolder extends RecyclerView.ViewHolder { public TextView tvHead; public TextView tvDesc; public ImageView ivWebImage; public ViewHolder(View itemView) { super(itemView); tvHead = (TextView) itemView.findViewById(R.id.tv_head); tvDesc = (TextView) itemView.findViewById(R.id.tv_desc); ivWebImage = (ImageView) itemView.findViewById(R.id.ivWebImage); } } public MyRecViewAdapter(List<ListItem> listItems, Context context) { this.listItems = listItems; this.context = context; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.list_item, parent, false); //return our view return new ViewHolder(v); } @Override public void onBindViewHolder(ViewHolder holder, int position) { ListItem listItem = listItems.get(position); holder.tvHead.setText(listItem.getHead()); holder.tvDesc.setText(listItem.getDesc()); holder.ivWebImage.setImageDrawable(listItem.getWebSiteImage()); /*Picasso.with(context).load(listItems.get(position).getImgUrl()) .error(R.drawable.ic_launcher_foreground) .placeholder(R.drawable.ic_launcher_foreground) .into(holder.ivWebImage);*/ } @Override public int getItemCount() { return listItems.size(); } } MainActivity.java
public class MainActivity extends AppCompatActivity { public static final String TAG = "mLog"; @BindView(R.id.recycler_view) RecyclerView recyclerView; @BindView(R.id.button) Button button; private RecyclerView.Adapter adapter; private RecyclerView.LayoutManager mLayoutManager; private ListItem item; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); OperationsDB operationsDB = new OperationsDB(this); operationsDB.execute(); mLayoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(mLayoutManager); try { item = operationsDB.get(); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } Drawable d = getResources().getDrawable(R.drawable.ic_launcher_background); List<ListItem> itemRecView = new ArrayList<>(); for (int i = 0; i < item.getHeadList().size(); i++) { ListItem listItem = new ListItem(); listItem.setHead(item.getHeadList().get(i)); listItem.setDesc(item.getUrlList().get(i)); listItem.setImgUrl(item.getImgUrlList().get(i)); listItem.setWebSiteImage(d); itemRecView.add(listItem); } adapter = new MyRecViewAdapter(itemRecView, this); recyclerView.setAdapter(adapter); MyRecViewAdapter.ViewHolder viewHolder = new MyRecViewAdapter.ViewHolder( recyclerView); Picasso.with(this).load(listItem.getImgUrlList.get(1)) .into(viewHolder.ivWebImage); } } private static class OperationsDB extends AsyncTask<Void, Void, ListItem> { Document document; private final WeakReference<MainActivity> activityWeakReference; OperationsDB(MainActivity context) { activityWeakReference = new WeakReference<>(context); } @Override protected ListItem doInBackground(Void... voids) { /* Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠ»Π°ΡΠ° Π΄Π»Ρ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΉ Π΄Π°Π½Π½ΡΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠΌΠΈ Π±ΡΠ΄ΡΡ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Ρ ΠΈΡΠ΅ΠΌΡ RecyclerView */ ListItem listItem = new ListItem(); // ΠΠΎΠ»Π»Π΅ΠΊΡΠΈΡ Π²Π΅Π± ΡΡΡΠ»ΠΎΠΊ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ
ΠΈΠ· ΠΠ List<String> urls = new ArrayList<>(); urls.addAll(getData().getUrlList()); // ΠΠ°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ ΡΡΡΠ»ΠΎΠΊ ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΡΠ°ΠΉΡΠΎΠ² listItem.setUrlList(urls); listItem.setHeadList(getData().getHeadList()); List<String> list = new ArrayList<>(); for (int i = 0; i < urls.size(); i++) { try { document = Jsoup.connect(urls.get(i)).get(); } catch (IOException e) { e.printStackTrace(); } Element img = document.select("img").first(); String imgSrc = img.absUrl("src"); list.add(imgSrc); } listItem.setImgUrlList(list); return listItem; } private ListItem getData() { DBAdapter db; db = Room.databaseBuilder(activityWeakReference.get(), DBAdapter.class, DB_NAME).build(); WebSitesDao webSitesDao = db.webSitesDao(); ListItem listItem = new ListItem(); listItem.setHeadList(webSitesDao.getColumn()); listItem.setUrlList(webSitesDao.getUrl()); return listItem; } } }