对于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
答案 0 :(得分:1)
根据您提供的跟踪,似乎uri.getHost()
为空,从内部实现向您抛出NPE
。您可以通过输出:
Log.d(TAG, "host = " + rssUrl.getHost());
打开连接之前。如果为null,请修复您的网址。
<强>更新强>
我看到主机字符串包含空格或'_'字符的情况有几个类似问题,例如this known bug或This solution表示下划线符号问题。