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

Java url.openstream()或urlconnection.getinputstream()在有效url上引发nullpointerexception,java,android,nullpointerexception,Java,Android,Nullpointerexception,对于android应用程序,由于有了新的服务器,我试图更改XML的URL,但内容是相同的。 我曾经这样做过: InputSource ins = new InputSource(rssUrl.openStream()); 这过去是有效的,在几天内仍然有效,而旧的URL在旧服务器上可用。但是,当我更改XML的URL时,我会在上面的行中得到一个NullPointerException 我确信rssUrl不是空的,我打印了它的值,它只是一个工作URL。我验证了XMl,XMl是有效的,但这并不重要,因

对于android应用程序,由于有了新的服务器,我试图更改XML的URL,但内容是相同的。 我曾经这样做过:

InputSource ins = new InputSource(rssUrl.openStream());
这过去是有效的,在几天内仍然有效,而旧的URL在旧服务器上可用。但是,当我更改XML的URL时,我会在上面的行中得到一个NullPointerException

我确信rssUrl不是空的,我打印了它的值,它只是一个工作URL。我验证了XMl,XMl是有效的,但这并不重要,因为问题是在解析开始之前提出的

我试过的一件事是这样的:

Urlconnection urlConnection= rssUrl.openurlconnection();
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
inputsource ins = new inputsource(in);
但这也引发了nullpointerexception

我读了一些东西(目前我正在使用7)。但我真的不喜欢它,也无法想象它为什么会起作用

编辑: 我尝试降级到JavaSE6,但没有成功

有人知道这个错误是如何发生的,以及如何解决它吗

堆栈:

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()能够再次工作。问题解决了,多亏了

根据您提供的跟踪,似乎
uri.getHost()
为空,从内部实现向您抛出了
NPE
。您可以通过输出以下内容来验证它是否为空:

Log.d(TAG, "host = " + rssUrl.getHost());
在打开连接之前。如果为空,请修复您的url

更新

例如,在主机字符串包含空格或'.'字符的情况下,或者在下划线符号的情况下,我看到了几个类似的问题。

请发布异常堆栈跟踪以及
rssUrl的初始化和类型。
。第一部分您是对的,在代码中删除了它,并尝试在此处复制,但出现了错误。我尝试了rssUrl.getHost(),但它只返回主机,而不是null。主机是否应包含http://?我得到了反斜杠前的url部分,没有http://could 你能把你的主机串给我吗?@Jasper。问题在于主机字符串中的下划线符号。恐怕你得改变这一点。请参阅我答案的更新。我会试试,让你知道。提前谢谢!我不知道这会带来麻烦……我想它可能已经在较新的android平台上得到了修复。您正在哪个android版本上运行代码?