Отображение картинки в Recycler через Picasso

287
04 марта 2017, 02:47

Добрый день!

Если вы решили это читать - извините за неприятный код.

Проблема вот в чём : Всё вроде бы работает, только вот Picasso не отображает картинки. Сайт парсится, ссылки достаются, но не отображаются, причем очень странный момент: если в дебаге поставить стопы на куске кода с Picasso, то они отображаютсяа, а если просто запускать - нет.

 public class MainActivity extends AppCompatActivity {
RecyclerView recyclerView;
LinearLayoutManager verticalLinearLayoutManager;
RecyclerAdapter adapter;
public Elements title;
public ArrayList<String> titleList = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    NewThread nt = new NewThread();
    nt.execute();
    recyclerView = (RecyclerView) findViewById(R.id.recycler);
    verticalLinearLayoutManager = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(verticalLinearLayoutManager);
    adapter = new RecyclerAdapter();
    recyclerView.setAdapter(adapter);
    adapter.addAll(titleList);
}
private class RecyclerAdapter extends RecyclerView.Adapter<RecyclerViewHolder>{
    ArrayList<String> linkList = new ArrayList<String>();
    public void addAll(ArrayList<String> titleList) {
        int pos = 0;
        this.linkList.addAll(titleList);
        notifyItemRangeInserted(pos, this.linkList.size());
    }
    @Override
    public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_card, parent, false);
        return new RecyclerViewHolder(view);
    }
    @Override
    public void onBindViewHolder(RecyclerViewHolder holder, int position) {
            Picasso.with(MainActivity.this).load(linklist.get(position)).into(holder.image3);
    }
    @Override
    public int getItemCount() {
        return linkList.size();
    }
}
private class RecyclerViewHolder extends RecyclerView.ViewHolder{
     public ImageView image3;
    public RecyclerViewHolder(View itemView) {
        super(itemView);
        image3 = (ImageView) itemView.findViewById(R.id.image2);
    }
    public void bind(String s) {
    }
}
        public class NewThread extends AsyncTask<String, Void, String> {
            @Override
            protected String doInBackground(String... arg) {
                Document doc;
                try {
                    doc = Jsoup.connect("https://habrahabr.ru/").get();
                    titleList.clear();
                    Elements link3 = doc.select("img[src$=.jpg]");
                    for(Element el:link3){
                        titleList.add(el.absUrl("src"));
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return null;
            }
            @Override
            protected void onPostExecute(String result) {

            }
        }

    }
Answer 1

Вы заполняете ваш список в другом потоке. Вызов recyclerView.setAdapter() происходит в момент, когда NewThread еще не выполнен.

@Override
protected void onPostExecute(String result) {
  adapter.addAll(titleList);
  adapter.notifyDataSetChanged();
}

onPostExecute будет вызван как только данные будут загружены, таким образом будут готовы к отображению. В дебаге у вас получалось, так как данные успевали загрузиться до присвоения адаптера.

NewThread nt = new NewThread();
nt.execute(); // выполняется в другом потоке, соответсвенно нельзя ждать что после этого вызова данные для отображения будут готовы
READ ALSO
JDBC, оптимизация кода

JDBC, оптимизация кода

Есть три метода, которые отличаются буквально в пару строчекМожно как-то избежать дублирования кода?

243
Выдает ошибку NullPointerException

Выдает ошибку NullPointerException

На строчке message = textMessagegetText() выдает java

306
перетаскивание ячеек html jquery

перетаскивание ячеек html jquery

Есть ли в природе готовый плагин jquery для перетаскивания ячеек html ? чтоб в дальнейшем их можно было сохранить в базу новые значения позиций

351
Проверка адаптивности сайта на Safari

Проверка адаптивности сайта на Safari

Всем приветЕсть сайт, адаптировал с помощью bootstrap

337