java - url.openstream() 或 urlconnection.getinputstream() 在有效 URL 上引发 nullpointerException

标签 java android nullpointerexception

对于 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);

但这也引发了空指针异常。

我读了一些东西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

最佳答案

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

Log.d(TAG, "host = " + rssUrl.getHost());

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

更新
当主机字符串包含空格或“_”字符时,我看到了几个类似的问题,例如 this known bug ,或This solution对于下划线符号问题。

关于java - url.openstream() 或 urlconnection.getinputstream() 在有效 URL 上引发 nullpointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20817383/

相关文章:

java - 我们可以使用包装类将 int 转换为 Byte,而不进行类型转换吗?

java - Spring Data REST 重写 findBy* 方法

java - Android SQL 数据库组织

java - 使用 fusedLocationProviderClient.requestLocationUpdates 时获取 "Caused by: java.lang.NullPointerException: Listener must not be null"

java - 传递数组引用时,如何更改对其他数组的引用?

java.lang.VerifyError : Expecting a stackmap frame

android - 如何将.doc文件从sd卡导入应用程序数据库?

java - 如何在JAVA中合并2个while循环以避免重复

JavaFx:TreeTableView 奇怪的 NullpointerException

java - 无法将子节点添加到树节点