Java 为什么';我的数组中没有任何元素吗

Java 为什么';我的数组中没有任何元素吗,java,android-studio,jsoup,Java,Android Studio,Jsoup,所以我创建了一个数组来存储来自jsoup调用的数据,当我试图运行这个方法来实际放置动态数据时,它根本不在其中放置任何东西。这太奇怪了 public class MainActivity extends AppCompatActivity { List<Book> lstBook; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.on

所以我创建了一个数组来存储来自jsoup调用的数据,当我试图运行这个方法来实际放置动态数据时,它根本不在其中放置任何东西。这太奇怪了

public class MainActivity extends AppCompatActivity {

    List<Book> lstBook;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        lstBook = new ArrayList<>();
        getWebsite();
        lstBook.add(new Book("Kenichi: The Mightiest Disciple", "All you really got to know is that this is THE Greatest Book Ever!", "http://fmcdn.Bookhere.com/store/Book/18607/cover.jpg?token=7ef7d63df101d2e3ff52c9c8e15aa6ae4abc176e&amp;ttl=1594666800&amp;v=1594289853"));
        lstBook.add(new Book("Kenichi: The Mightiest Disciple", "All you really got to know is that this is THE Greatest Book Ever!", "http://fmcdn.Bookhere.com/store/Book/18607/cover.jpg?token=7ef7d63df101d2e3ff52c9c8e15aa6ae4abc176e&amp;ttl=1594666800&amp;v=1594289853"));
        lstBook.add(new Book("Kenichi: The Mightiest Disciple", "All you really got to know is that this is THE Greatest Book Ever!", "http://fmcdn.Bookhere.com/store/Book/18607/cover.jpg?token=7ef7d63df101d2e3ff52c9c8e15aa6ae4abc176e&amp;ttl=1594666800&amp;v=1594289853"));
        lstBook.add(new Book("Kenichi: The Mightiest Disciple", "All you really got to know is that this is THE Greatest Book Ever!", "http://fmcdn.Bookhere.com/store/Book/18607/cover.jpg?token=7ef7d63df101d2e3ff52c9c8e15aa6ae4abc176e&amp;ttl=1594666800&amp;v=1594289853"));
        lstBook.add(new Book("Kenichi: The Mightiest Disciple", "All you really got to know is that this is THE Greatest Book Ever!", "http://fmcdn.Bookhere.com/store/Book/18607/cover.jpg?token=7ef7d63df101d2e3ff52c9c8e15aa6ae4abc176e&amp;ttl=1594666800&amp;v=1594289853"));

因此,当我编译应用程序时,我没有得到任何输入,就好像在
lstBook
中没有任何输入一样。它唯一保留的是在方法调用下面的手动输入

解决方案


runOnUiThread(新的Runnable(){public void run(){myAdapter.notifyDataSetChanged();}})

我猜您有多线程问题。您可以从不同的线程访问列表,而无需同步,因此可能会出现任何问题。你可以使用一个线程安全列表,但老实说,我会考虑重新设计多线程的想法。最好的解决方案是,只从一个线程访问列表。

Amazon抛出验证码。因此,在html中有
lstBook
的值。最简单的解决方案是使用ProxiesOrry,但这是错误的链接。调用正常,在getWebsite调用结束时存储了一些内容,但应用程序屏幕上没有填充任何内容。与我硬编码不同。你发布的代码不完整。你能发布一个复制该问题的最小版本,并告诉我们列表(不是数组)的确切位置是空的吗?更新后的代码更有意义。直接从MainActivity.Call
myAdapter.notifyDataSetChanged()中提取run()
方法中的
for
循环之后进行code>。这种方法是从在线教程中获得的。难道没有一种方法可以在主函数中进行调用,或者创建一个新线程是唯一的方法吗?我的意思是,在填充列表之前启动线程。然后,列表不是线程安全的,当从两个线程同时写入时会产生奇怪的效果。你为什么不把这些线放进线里呢?
        RecyclerView myrv = (RecyclerView) findViewById(R.id.recyclerview_id);
        RecyclerViewAdapter myAdapter = new RecyclerViewAdapter(this, lstBook);
        myrv.setLayoutManager(new GridLayoutManager(this, 3));
        myrv.setAdapter(myAdapter);

    }

    private void getWebsite() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                final StringBuilder builder = new StringBuilder();
                try {
                    Document doc = Jsoup.connect("https://www.Bookhere.cc/ranking/").get();
                    Elements description = doc.select("p.Book-list-1-item-title");
                    int length = description.size();
                    String cont = description.eq(1).text();
                    for (int i = 0; i < 10; i++) {
                        String imgUrl = description.eq(i).text();
                        String title = doc.select("img.Book-list-1-cover").eq(i).attr("src");
                        Book test = (new Book(title,"All you really got to know is that this is THE Greatest Book Ever!","http://fmcdn.Bookhere.com/store/Book/18607/cover.jpg?token=7ef7d63df101d2e3ff52c9c8e15aa6ae4abc176e&amp;ttl=1594666800&amp;v=1594289853"));
                        lstBook.add(test);
                        Log.d("Yuh", lstManga.toString());

                        Log.d("Yuh", test.getTitle());
                    }
                } catch (IOException ignored) {
                    Log.d("Yuh","This duo");
                }
            }
        }).start();
    }
}