【问题标题】:Strange Jsoup OutOfBoundsException when fetching html获取html时奇怪的Jsoup OutOfBoundsException
【发布时间】:2016-07-24 09:02:20
【问题描述】:

当在迭代(inside for)中使用 12 时,它会正确输出,当将 13 分配给迭代器(inside for)时会在行上抛出 IndexOutOfBoundsException

imageUrl[i]=images.select("img").get(i).absUrl("data-original");`.

注意: hasClass("lazy") 中的惰性类有12个元素:

Elements headlines = document.select("div.newscat a[href] h3");
Elements images=document.select("div.newscat").select("a[href]");
int lengthHeadline = headlines.size(); // outputs 13
String[] newsHeadline=new String[lengthHeadline];
String[] imageUrl=new String[lengthHeadline]

for(int i=0; i<12; i++){

    if (images.get(i).children().hasClass("lazy")){
        imageUrl[i] = images.select("img").get(i).absUrl("data-original");
    }else{
        imageUrl[i] = "http://something.com/8046.png";
    }
    System.out.println(imageUrl[i]);

}

编辑:

HTML 代码

在这里,我假设有 n 个 .newscat 类,每个类都包含图片和标题,但在某些情况下,它们不包含图像而只有标题,因此我想显示任何其他图像,而不是空白显示。所以我的图像数组应该算出标题。

我想要显示的视图(类似的)。

【问题讨论】:

  • 我猜这是崩溃的部分:"images.select("img").get(i).absUrl("data-original");"所以你的“img”元素可能没有 13 个元素?
  • 我不确定这里有什么奇怪的。如果数组/列表有 12 个元素,则意味着第一个元素用 0 索引,最后一个元素用 11 索引(长度或大小减 1,因为索引从 0 开始)。因此,如果您将循环限制为 13,那么最后一个可能的非 13 值将是 12,它仍然大于最后一个元素的索引。无论如何,您的问题有点奇怪,因为您声称它的 lazy 类有 12 个元素(无论这意味着什么),但您没有在代码中选择任何这些元素。
  • @Pshemo 嗨,感谢您的评论,也许您跳过了我在行 int lengthHeadline = headlines.size(); String[] imageUrl=new String[lengthHeadline] 上创建 13 元素数组的点。这里的标题由 13 个元素组成
  • 您似乎没有意识到[i] 不仅是受某些限制的地方。还有get(i)。尝试打印images.select("img").size() 的结果很可能是 12。
  • 我知道这一点。但仔细看看那条线。您在 两个 处使用i[i]get(i)。两者都受到一些界限的限制,这些界限不需要相等。

标签: android jsoup indexoutofboundsexception


【解决方案1】:

将 13 分配给迭代器(在 for 内)时会在行上抛出 IndexOutOfBoundsException

imageUrl[i] = images.select("img").get(i).absUrl("data-original");

没有检查images.select("img") 返回的Element 列表大小。

试试这个:

if (images.get(i).children().hasClass("lazy")) {
    Elements imgs = images.select("img");
    if (imgs.size() < i) {
       imageUrl[i] = imgs.get(i).absUrl("data-original");
    } else {
       // Handle the edge case here...
    }
} else {
    imageUrl[i] = "http://something.com/8046.png";
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多