url.openStream()在一个url上会出现NullPointerException异常

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

url.openStream()或urlconnection.getinputstream()在有效的URL上引发nullpointerexception

但是这个解决方案也不起作用。 问题是我正在尝试在我的Android应用程序中对此URL进行openStream > http://www.techworld.com/security/rss。但它总是给出NullPointerException。 我首先检查了连接是否成功,
connection.getResponseCode();

并且返回了200表示连接正常。

然后,根据可行的解决方案,我将JRE版本从1.7更改为1.6,但仍然无法解决问题。

当我尝试使用相同的代码打开其他url时,它们完全正常,但是上面的链接会导致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项目运行时,它可以加载并找到内容,而不会抛出NPE异常。
这里可能出现了什么问题?
以下是logCat日志,它只显示了一行错误。
01-21 20:46:11.575: E/testApp(30335): java.lang.NullPointerException www.techworld.com

展示NPE的堆栈跟踪?从上面的片段中,唯一合乎逻辑的NPE来自于connection.connect()这一行。 - Kon
不好意思,在“openStream”行上它显示了“NPE”,如您所见,我已经在更新的代码中添加了“catch”块。同时,我也附上了Logcat,请查看。我还想提一下,其他URL都可以正常加载。 - bhuvesh
2
如果在这种情况下您没有在catch块中捕获错误,那么实际上会更有用,这样我们就可以查看完整的LogCat堆栈跟踪。这样我们就知道它是否特别针对myLink.openStream()或以下行中的.start()。但是我们将假设您告诉我们connect()行是罪魁祸首。 - Jay Snayder
@JaySnayder,实际上我尝试过了,但是Eclipse报错说“未处理的异常类型IOException”。 - bhuvesh
在 catch 块中,使用 e.printStackTrace() 而不是自定义的 Log.d。 - Selvin
@bhuvesh 非常好。这为我们提供了更好的关于在Logcat中打印出的堆栈跟踪信息。 - Jay Snayder
1个回答

2

至少这段代码是有效的:

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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接