【问题标题】:NullPointerException- I don't know where [duplicate]NullPointerException-我不知道在哪里[重复]
【发布时间】:2020-05-07 08:20:10
【问题描述】:

抱歉扩展 NullPointerException 泛滥:D

我已经阅读了大量关于 NullPointerException 的问题,但我无法弄清楚我的代码中的问题所在。

问题线:

if(userAgent.doc.innerHTML().contains("haha")

我试过 String x = userAgent.doc.innerHTML();并在下一行使用条件,但仍然存在:原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'java.lang.String com.jaunt.Document.innerHTML()' /p>

请知道我做错了什么吗?

周边代码:

private class AT extends AsyncTask<Void, Void, Void> {
        @Override
        protected Void doInBackground(Void... voids) {
            UserAgent userAgent = new UserAgent();
            toSearch += 50;
            while (visited.size() < toSearch) {
                try {
                    userAgent.visit(currentUrl);
                    Elements elements = userAgent.doc.findEvery("<a href>");
                    for (Element e : elements) {
                        String url = e.getAt("href");
                        if (!toVisit.contains(url) && !visited.contains(url) && url.contains(stayAt))
                            toVisit.add(url);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                visited.add(currentUrl);
                if(userAgent.doc.innerHTML().contains(key))
                    recipes.add(currentUrl);
                toVisit.remove(0);
                currentUrl = toVisit.get(0);
            }
            return null;
        }
    }

非常感谢您的建议! :)

【问题讨论】:

  • 你能分享一下堆栈跟踪吗
  • 您是否通过读取堆栈跟踪检查了 NPE 在哪里?您是否尝试过使用调试器?
  • 欢迎来到 Stackoverflow。你试过调试你的代码吗?这通常是发现代码中错误的好方法。此外,您应该提及您尝试解决此错误的原因。
  • userAgent.doc 为空
  • 我猜userAgent.visit(currentUrl); 会抛出一个ResponseException,你会发现它好像什么都没发生一样。您需要找出失败的原因。 currentUrl 有问题吗?您的应用程序的互联网权限有问题吗?也许您正在尝试访问 HTTP URL 而不是 HTTPS,并且默认情况下最近的 Android 版本拒绝这样做?

标签: java android android-studio nullpointerexception jaunt-api


【解决方案1】:

userAgent 中的 doc 对象为空。

在您尝试在recipes 中添加currentUrl 时添加空检查验证userAgent.doc != null

 protected Void doInBackground(Void... voids) {
        UserAgent userAgent = new UserAgent();
        toSearch += 50;
        while (visited.size() < toSearch) {
            try {
                userAgent.visit(currentUrl);
                Elements elements = userAgent.doc.findEvery("<a href>");
                for (Element e : elements) {
                    String url = e.getAt("href");
                    if (!toVisit.contains(url) && !visited.contains(url) && url.contains(stayAt))
                        toVisit.add(url);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            visited.add(currentUrl);
            if(userAgent.doc != null && userAgent.doc.innerHTML().contains(key))
                recipes.add(currentUrl);
            toVisit.remove(0);
            currentUrl = toVisit.get(0);
        }
        return null;
    }

【讨论】:

  • 谢谢!它有效:) 虽然现在我得到 runtimeException Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 在下一行,但我会处理它:D
猜你喜欢
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 2020-09-20
  • 1970-01-01
  • 2021-11-07
相关资源
最近更新 更多