Как заменить String [] на ArrayList? - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь заполнить свой gridview изображениями, используя Пикассо. Я использую jsoup для сбора ссылок на изображения и помещаю их в ArrayList. У меня что-то не так с моим ImageAdapter, потому что ни одно из моих изображений не загружается при запуске приложения. Мой журнал показывает собираемые ссылки, так что работает. Любая помощь будет оценена. Я публикую весь код для Активности.

   public class MainActivity extends Activity
  {GridView grid;
String url="http://dstreet.site/";
String link,title,src;
ArrayList list= new ArrayList();



   @Override
   protected void onCreate(Bundle savedInstanceState)
   {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Scrapper();
    grid = (GridView)findViewById(R.id.grid);
    grid.setAdapter(new ImageAdapter(this, list));


    }


public class ImageAdapter extends BaseAdapter {


    ArrayList list;
    private LayoutInflater inflater;

    Context c;
     int mCount;

    ImageAdapter(Context context, ArrayList list) {
        inflater = LayoutInflater.from(context);
        c = context;

        mCount = list.size();
        this.list=list;

    }

    @Override
    public int getCount() {
        return mCount;
    }

    @Override
    public Object getItem(int position) {
        return true; 
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View 
    convertView, ViewGroup parent) {
        final ViewHolder holder;
        View view = convertView;
        if (view == null) {
            view = inflater.inflate(R.layout.img, parent, 
       false);
            holder = new ViewHolder();
            assert view != null;

            holder.imageView = (ImageView) 
      view.findViewById(R.id.image);


            view.setTag(holder);
        } else {
            holder = (ViewHolder) view.getTag();
        }

        Picasso.get()
            .load(list.get(position))
            .placeholder(R.drawable.ic_launcher)
            .error(R.drawable.ic_launcher)
            .fit()
            .into(holder.imageView, new Callback() {

                @Override
                public void onError(Exception p1)

    {holder.imageView.setVisibility(View.INVISIBLE);
                    // TODO: Implement this method
                }


                @Override
                public void onSuccess() {

   holder.imageView.setVisibility(View.VISIBLE);
                    }


            });

        return view;
    }
}

static class ViewHolder {
    ImageView imageView;

}
public void Scrapper()
{
    Content content= new Content();
    content.execute();
}

public class Content extends 
   AsyncTask<Void,Void,Void>
{

    @Override
    protected Void doInBackground(Void[] p1)
    {
        // TODO: Implement this method

        try
        {
            Document doc = Jsoup.connect(url).get();
            // Identify Table Class "worldpopulation"
            for (Element table : 
     doc.select("div[class=poster]")) {

                Elements imgSrc = 
   table.select("img[src]");
                // Get only src from img src
                src = imgSrc.attr("src");
                list.add(src);
            }







            Log.d("image links",list.toString());
        }
        catch (IOException e)
        {e.printStackTrace();


        }
        return null;


    }

}}

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Похоже, вы не перебираете элементы после того, как запросили таблицу для изображений:

for (Element table : doc.select("div[class=poster]")) {

    Elements imgSrc = table.select("img[src]");
    src = imgSrc.attr("src");
    list.add(src);

}

Что-то вроде этого должно сделать это:

doc.select("div[class=poster]")               // get list of div
   .stream()                                  // for each div
   .map(table -> table.select("img[src]"))    // find all images
   .flatmap(Elements::stream)                 // collapse images into 1 list
   .map(imgSrc -> imgSrc.attr("src"))         // for each image
   .forEach(list::add);                       // add to Collection
0 голосов
/ 08 января 2019

Если вы хотите заменить String [] на ArrayList, вам нужно использовать ArrayList.get (position) вместо IMAGE_URLS [position].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...