将 Jsoup 中的对象添加到 ArrayList

Adding objects from Jsoup to an ArrayList

我正在尝试将一堆对象(来自 JSoup)添加到数组列表中。出于某种原因,对象不是 added.The JSoup 查询是正确的,因为我打印了结果,因为它们被添加到 for 循环中。任何帮助将不胜感激。

public List<MainGridItem> fruitItem = new ArrayList<>();


    Thread downloadThread = new Thread(new Runnable() {
        @Override
        public void run() {
            Document doc = null;
            try {
                doc = Jsoup
                        .connect("http://banana-mango.com/hello.htm")
                        .get();
                Elements fruits = doc.select("p[align=center]");
                for (int i = 0; i < fruits.size(); i++) {
                    MainGridItem gr = new MainGridItem(fruits.get(i).select("img").attr("abs:src"),fruits.get(i).text().trim(),fruits.get(i).select("a").attr("abs:href"));
                    //System.out.println(gr.getStuff+gr.getMore+gr.getAgain);
                    fruitItem.add(gr);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });
    downloadThread.start();

我认为您正在 downloadThread 中添加元素并在 Ui Thread 中使用 ArrayList。所以,你的代码中存在同步问题。

如果你只是想超越com,你可以这样做(仅限伪代码)

 public List<MainGridItem> fruitItem = new ArrayList<>();
    Handler handler = new Handler();


        Thread downloadThread = new Thread(new Runnable() {
            @Override
            public void run() {
                Document doc = null;
                try {
                    doc = Jsoup
                            .connect("http://banana-mango.com/hello.htm")
                            .get();
                    Elements fruits = doc.select("p[align=center]");
                    for (int i = 0; i < fruits.size(); i++) {
                        MainGridItem gr = new MainGridItem(fruitItem.get(i).select("img").attr("abs:src"),fruitItem.get(i).text().trim(),fruitItem.get(i).select("a").attr("abs:href"));
                        //System.out.println(gr.getStuff+gr.getMore+gr.getAgain);
                        fruitItem.add(gr);
                    }
               handler.post(new Runnable() {
                    @Override
                    public void run() {
                        // Access your arrayList Here and do Ui stuff
                    }
                });
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });
        downloadThread.start();