gpt4 book ai didi

java - 在android中从HttpURLConnection获取InputStream时获取UnknownLengthHttpInputStream

转载 作者:IT老高 更新时间:2023-10-28 23:36:17 30 4
gpt4 key购买 nike

HttpURLConnection.getInputStream() 给出 UnknownLengthHttpInputStream 并且由于此 Document 解析引发 SAX 解析器异常。

以下是代码

try{
URL url = new URL(uri);
HttpURLConnection connection =
(HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Accept", "application/xml");

InputStream xml = connection.getInputStream();
System.out.println(connection.getResponseCode());
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(connection.getInputStream());
doc.getDocumentElement().normalize();

}catch(Exception e){
e.printStackTrace();
}

任何人都知道 UnknownLengthHttpInputStream 的原因。我只在 android 中收到此错误,并且此代码在 Java Project 中完美运行。

以下是 LogCat 的异常:

08-08 11:07:40.490: W/System.err(1493): org.xml.sax.SAXParseException: Unexpected end of document
08-08 11:07:40.504: W/System.err(1493): at org.apache.harmony.xml.parsers.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:129)
08-08 11:07:40.510: W/System.err(1493): at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:107)
08-08 11:07:40.510: W/System.err(1493): at com.example.testws.MainActivity.onCreate(MainActivity.java:59)
08-08 11:07:40.520: W/System.err(1493): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
08-08 11:07:40.520: W/System.err(1493): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
08-08 11:07:40.520: W/System.err(1493): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
08-08 11:07:40.520: W/System.err(1493): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
08-08 11:07:40.530: W/System.err(1493): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)

提前致谢。

最佳答案

它可能是 Http 1.0(旧服务器或配置错误)服务器或未配置保持 Activity 状态。在这种情况下,流的长度在从服务器关闭连接时是已知的。尝试在您的请求 header 中指定 http1.1 和 keep-alive(一些谷歌搜索会有所帮助)。只有在服务器响应中指定了内容长度属性,你才会提前知道流的长度。

解决方法:将 http 流完全读入 ByteBufferStream(直到 read() 返回 -1)。然后将 ByteBufferInputStream 扔到你的库中(现在知道长度)

关于java - 在android中从HttpURLConnection获取InputStream时获取UnknownLengthHttpInputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11858204/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com