我在 Android 应用程序中使用 BufferedReader 从网络服务器检索 XML 文件。我目前拥有的代码可与许多其他文件一起使用。但是对于这个特定的文件,我得到了一个 SocketTimeoutException。下面是我的代码:
socket = new Socket();
socket.connect(new InetSocketAddress(address, intPort), 5000);
String data;
socket.setSoTimeout(5000); //timeout after X milliseconds
dos = new DataOutputStream(socket.getOutputStream());
dis = new BufferedReader(new InputStreamReader(socket.getInputStream()));
dos.write(requestmsg.getBytes());
dos.flush();
StringBuilder sb = new StringBuilder();
while ((data = dis.readLine()) != null)
sb.append(data);
returnData = sb.toString();
当我查看 dis 的缓冲区时,我可以在那里看到整个文件:
但是在阅读了这么多之后它抛出了异常:
HTTP/1.1 200 OKCache-Control: no-storeContent-Type: text/xmlContent-Length: 215
这是我要读取的文件:
<?xml version="1.0" encoding="ISO-8859-1"?><datavalues>...</datavalues>
这是我的 logcat 错误输出:
11-05 08:22:41.551 3750-3779/ W/System.err: java.net.SocketTimeoutException
11-05 08:22:41.553 3750-3779/ W/System.err: at java.net.PlainSocketImpl.read(PlainSocketImpl.java:492)
11-05 08:22:41.555 3750-3779/ W/System.err: at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46)
11-05 08:22:41.556 3750-3779/ W/System.err: at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:241)
11-05 08:22:41.558 3750-3779/ W/System.err: at java.io.InputStreamReader.read(InputStreamReader.java:233)
11-05 08:22:41.560 3750-3779/ W/System.err: at java.io.BufferedReader.fillBuf(BufferedReader.java:145)
11-05 08:22:41.562 3750-3779/ W/System.err: at java.io.BufferedReader.readLine(BufferedReader.java:397)
…
11-05 08:22:41.568 3750-3779/ W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:288)
11-05 08:22:41.570 3750-3779/ W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
11-05 08:22:41.572 3750-3779/ W/System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
11-05 08:22:41.573 3750-3779/ W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
11-05 08:22:41.574 3750-3779/ W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
11-05 08:22:41.575 3750-3779/ W/System.err: at java.lang.Thread.run(Thread.java:841)
我不确定问题是否出在 XML 文件中,或者我的代码中是否需要更改某些内容。