Java 为什么';我的数组中没有任何元素吗
所以我创建了一个数组来存储来自jsoup调用的数据,当我试图运行这个方法来实际放置动态数据时,它根本不在其中放置任何东西。这太奇怪了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
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&ttl=1594666800&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&ttl=1594666800&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&ttl=1594666800&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&ttl=1594666800&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&ttl=1594666800&v=1594289853"));
因此,当我编译应用程序时,我没有得到任何输入,就好像在lstBook
中没有任何输入一样。它唯一保留的是在方法调用下面的手动输入
解决方案
runOnUiThread(新的Runnable(){public void run(){myAdapter.notifyDataSetChanged();}})代码>我猜您有多线程问题。您可以从不同的线程访问列表,而无需同步,因此可能会出现任何问题。你可以使用一个线程安全列表,但老实说,我会考虑重新设计多线程的想法。最好的解决方案是,只从一个线程访问列表。Amazon抛出验证码。因此,在html中有lstBook
的值。最简单的解决方案是使用ProxiesOrry,但这是错误的链接。调用正常,在getWebsite调用结束时存储了一些内容,但应用程序屏幕上没有填充任何内容。与我硬编码不同。你发布的代码不完整。你能发布一个复制该问题的最小版本,并告诉我们列表(不是数组)的确切位置是空的吗?更新后的代码更有意义。直接从MainActivity.CallmyAdapter.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&ttl=1594666800&v=1594289853"));
lstBook.add(test);
Log.d("Yuh", lstManga.toString());
Log.d("Yuh", test.getTitle());
}
} catch (IOException ignored) {
Log.d("Yuh","This duo");
}
}
}).start();
}
}