Выполнение некоторых сетевых операций внутри адаптера

Я занимаюсь разработкой приложения для Android, в котором у меня есть список, отображающий некоторых пользователей. Таким образом, я хочу отобразить их изображения в этом списке, поэтому я делаю так:

private class StableArrayAdapter extends ArrayAdapter<Request>{
    private Context context;
    private Bitmap tempobmp;
    private List<User> mylist;
    public StableArrayAdapter(Context context,List<User> mylist){
        super(context, R.layout.request_layout, mylist);
        this.context = context;
        this.mylist = mylist;
    }
    public class ViewHolder{
        public ImageView image;
      }
    public View getView(int position,View convertView,ViewGroup parent){
        View vi = convertView;
        if(vi==null){
            ViewHolder holder = new ViewHolder()
            holder.image = (ImageView) vi.findViewById(R.id.requestImage);
        }
        final ViewHolder holder = (ViewHolder) vi.getTag();
        User s = mylist.get(position);
        try{

            final URL url = new URL(myapp.getUser().getPhoto().getS3Url());
            Thread thread = new Thread(new Runnable() {
                  @Override
                  public void run() {
                      try{
                        InputStream is = (InputStream) url.getContent();

                        Bitmap bmp = BitmapFactory.decodeStream(is);

                        tempobmp=bmp;

                      }
                      catch(Exception e){
                          Log.d("eeeeA52","eeeeA52"+e);
                      }
                  }
            });
            thread.start(); 
            thread.wait();

        }
        catch(Exception e){
            Log.d("eeeeAF","eeeeAF"+e);
        }
        holder.image.setImageBitmap(tempobmp);
      return vi;
    }

Все журналы, которые я могу поместить в мою ветку, говорят мне, что нет проблем с получением растрового изображения из моей базы данных, но когда я запускаю страницу с этим ListView, изображение по-прежнему остается по умолчанию. Можно ли использовать поток в адаптере для извлечения сетевых данных? Если да, то какая из них лучше?

Спасибо вам, ребята:)

1 ответ

Решение

Обычно считается плохой идеей совершать сетевые вызовы непосредственно с адаптера. но если вы на самом деле не можете выполнить свои загрузки в вашей деятельности / фрагменте до заполнения списка, вы можете использовать одну из многих библиотек, которые делают это, например, Volley, у которой есть только объект networkimageview. Или вы можете использовать библиотеку Picasso, созданную специально для загрузки изображений из сети и отображения в обычном imageView.

Оба хорошо документированы и просты в использовании. (Пикассо требуется 1 строка кода)

Другие вопросы по тегам