Android アプリで BufferedReader を使用して、Web サーバーから 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 ファイルにあるのか、コードを変更する必要があるのかはわかりません。