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

时间:2013-12-28 17:35:11

标签: java android nullpointerexception

对于Android应用程序,我正在尝试更改XML的URL,因为新服务器,但内容是相同的。 我曾经这样做过:

InputSource ins = new InputSource(rssUrl.openStream());

这曾经工作过几天仍然存在,而旧的服务器上的旧URL可用。但是当我更改XML的URL时,我在上面的行上得到了NullPointerException。

我确定rssUrl不是null,我打印它的值只是工作URL。我验证了XMl并且XML是有效的,但这并不重要,因为在解析开始之前会引发问题。

我尝试的其中一件事是这样的:

Urlconnection urlConnection= rssUrl.openurlconnection();
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
inputsource ins = new inputsource(in);

但这也引发了一个nullpointerexception。

我读了一些about downgrading my Java to 6(目前我使用的是7)。但我真的不喜欢它,也无法想象它为什么会起作用。

修改 我尝试降级到java se 6但是没有用。

有谁知道这个错误怎么可能以及如何解决?

堆栈:

12-28 22:14:53.635: W/System.err(6949): java.lang.NullPointerException
12-28 22:14:53.725: W/System.err(6949):     at libcore.net.http.HttpConnection$Address.hashCode(HttpConnection.java:343)
12-28 22:14:53.725: W/System.err(6949):     at java.util.HashMap.get(HashMap.java:298)
12-28 22:14:53.725: W/System.err(6949):     at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:67)
12-28 22:14:53.725: W/System.err(6949):     at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
12-28 22:14:53.725: W/System.err(6949):     at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308)
12-28 22:14:53.725: W/System.err(6949):     at libcore.net.http.HttpEngine.connect(HttpEngine.java:303)
12-28 22:14:53.735: W/System.err(6949):     at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282)
12-28 22:14:53.735: W/System.err(6949):     at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232)
12-28 22:14:53.735: W/System.err(6949):     at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273)
12-28 22:14:53.735: W/System.err(6949):     at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168)
12-28 22:14:53.735: W/System.err(6949):     at java.net.URL.openStream(URL.java:462)
12-28 22:14:53.735: W/System.err(6949):     at com.hera.ontdekdelft.StartUp$LoadData.doInBackground(StartUp.java:610)
12-28 22:14:53.735: W/System.err(6949):     at com.hera.ontdekdelft.StartUp$LoadData.doInBackground(StartUp.java:1)
12-28 22:14:53.735: W/System.err(6949):     at android.os.AsyncTask$2.call(AsyncTask.java:264)
12-28 22:14:53.735: W/System.err(6949):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
12-28 22:14:53.735: W/System.err(6949):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
12-28 22:14:53.735: W/System.err(6949):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
12-28 22:14:53.735: W/System.err(6949):     at j.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
12-28 22:14:53.735: W/System.err(6949):     at java.lang.Thread.run(Thread.java:856)
ava.util

解决方案

URL中的下划线导致android失败。我的解决方案是编辑XML文件的URL,以便rssUrl.openstream()再次工作。问题解决了,感谢Kiruwka

1 个答案:

答案 0 :(得分:1)

根据您提供的跟踪,似乎uri.getHost()为空,从内部实现向您抛出NPE。您可以通过输出:

来验证它是否为null
Log.d(TAG, "host = " + rssUrl.getHost());

打开连接之前。如果为null,请修复您的网址。

<强>更新
我看到主机字符串包含空格或'_'字符的情况有几个类似问题,例如this known bugThis solution表示下划线符号问题。