【问题标题】:url.openStream() gives NullPointerException for just one urlurl.openStream() 只为一个 url 提供 NullPointerException
【发布时间】:2015-01-21 15:58:21
【问题描述】:

请不要将其标记为重复,因为我在发布之前已经搜索过 Stackoverflow,并找到了这个解决方案,

url.openstream() or urlconnection.getinputstream() raise nullpointerexception on valid URL

但这个解决方案也不起作用。

问题是我试图在这个 url 上 openStream > http://www.techworld.com/security/rss 为我的 Android 应用程序。

但它总是给NullPointerException

我先检查了连接,看是否连接成功,

connection.getResponseCode();

它返回200,所以连接正常。

然后根据可用的解决方案,我将 JRE 版本从 1.7 更改为 1.6,但这仍然不起作用。

当我尝试openStream 其他网址时,它们使用相同的代码绝对可以正常工作,但上面的链接给出了NPE

这是代码,

URL mylink = new URL ("http://www.techworld.com/security/rss");

HttpURLConnection connection;
connection = (HttpURLConnection) myLink.openConnection();   
connection.connect();

if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
    try {
        domObject = new DOM(myLink.openStream());
        domObject.start();

    } catch (Exception e) {
        Log.e(TAG,e+" " + host);
    }    
}

在上面的代码中,host = myLink.getHost();

我还想提一提的是,当我将此代码作为 Java 项目而不是 Android 项目运行时,它会加载查找而不抛出 NPE

这可能是什么问题?

这是logCat,它只显示一行错误,

01-21 20:46:11.575: E/testApp(30335): java.lang.NullPointerException www.techworld.com

【问题讨论】:

  • 显示 NPE 的堆栈跟踪?从上面的sn-p,唯一的逻辑NPE来自connection.connect()这一行
  • 不,它在openStream 行上显示NPE,您可以看到更新代码的catch 块。我还添加了 Logcat ,请参阅。我还想提一下,其他 URL 加载非常好。
  • 在这种情况下,如果您没有在 catch 块中捕获错误,实际上会更有用,以便我们查看完整的 LogCat 堆栈跟踪。这样我们就知道它是否专门针对下一行中的 myLink.openStream() 或 .start()。但我们假设您告诉我们 connect() 行是罪魁祸首。
  • @JaySnayder,实际上我试过了,但是 Eclipse 给出了错误,Unhadled exception type IOException.
  • 然后使用 e.printStackTrace() 代替自定义 Log.d ...(内部捕获)

标签: java android nullpointerexception


【解决方案1】:

至少这段代码有效:

URL url;
try {
    url = new URL("http://www.techworld.com/security/rss");
    HttpURLConnection httpURLConnection;
    httpURLConnection = (HttpURLConnection) url.openConnection();
    httpURLConnection.connect();
    if (httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream()));
        StringBuffer stringBuffer = new StringBuffer();
        try {
            String inputLine;
            while ((inputLine = bufferedReader.readLine()) != null) {
                stringBuffer.append(inputLine).append("\n");
            }
        } finally {
            bufferedReader.close();
        }

        System.out.println(stringBuffer.toString());
        }
} catch (IOException e) {
    e.printStackTrace();
}

我认为您的代码尝试打开连接两次。当第一个连接没有关闭时,您尝试连接另一个 myLink.openStream()。使用 connection.getInputStream() 可能会更好。

【讨论】:

    猜你喜欢
    • 2014-01-16
    • 2012-07-27
    • 2018-11-14
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 2021-06-19
    • 2016-04-14
    相关资源
    最近更新 更多