来自POST的getInputStream时的JAVA EOFException

0 java post android exception

我试图从POST得到响应,但当我做输入throwsexception

     try {
            conn = (HttpURLConnection) url.openConnection();
            conn.setDoOutput(true);
            conn.setDoInput(true);
            // Marcamos a 3s el tiempo maximo de espera
            conn.setReadTimeout(30000000);
            conn.setUseCaches(true);
            conn.setFixedLengthStreamingMode(bytes.length);
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type",
                "application/x-www-form-urlencoded;charset=UTF-8");
            // post the request
            // Abrimos una señal de salida
            OutputStream out = conn.getOutputStream();
            out.write(bytes);
            out.flush();
            String buffer;
            // Abrimos una señal de entrada
here is where android throws and exception
            InputStreamReader ip = new InputStreamReader(conn.getInputStream());
            BufferedReader in2 = new BufferedReader(ip);
            // Bucle que recoge todas las respuestas

            while ((buffer = in2.readLine()) != null) {
                Log.e(" ", buffer);
            }
            // Cerramos las señales de entrada y salida
            in2.close();
            out.close();

        } catch (IOException e) {
            Log.e(TAG, "ERROR" + e.toString());
            e.printStackTrace();
        } finally {
            conn.disconnect();
        }
Run Code Online (Sandbox Code Playgroud)

LOG TAG显示了这个:

08-01 10:05:53.223: E/WooWMe GCM(798): ERRORjava.io.EOFException
08-01 10:05:53.223: W/System.err(798): java.io.EOFException
08-01 10:05:53.233: W/System.err(798):  at libcore.io.Streams.readAsciiLine(Streams.java:203)
08-01 10:05:53.233: W/System.err(798):  at libcore.net.http.HttpEngine.readResponseHeaders(HttpEngine.java:560)
08-01 10:05:53.233: W/System.err(798):  at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:813)
08-01 10:05:53.233: W/System.err(798):  at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:274)
08-01 10:05:53.233: W/System.err(798):  at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168)
08-01 10:05:53.233: W/System.err(798):  at com.egartec.woowme.ChatActivity$3.doInBackground(ChatActivity.java:230)
08-01 10:05:53.233: W/System.err(798):  at com.egartec.woowme.ChatActivity$3.doInBackground(ChatActivity.java:1)
08-01 10:05:53.233: W/System.err(798):  at android.os.AsyncTask$2.call(AsyncTask.java:287)
08-01 10:05:53.244: W/System.err(798):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
08-01 10:05:53.244: W/System.err(798):  at java.util.concurrent.FutureTask.run(FutureTask.java:137)
08-01 10:05:53.244: W/System.err(798):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
08-01 10:05:53.253: W/System.err(798):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
08-01 10:05:53.253: W/System.err(798):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
08-01 10:05:53.253: W/System.err(798):  at java.lang.Thread.run(Thread.java:856)
Run Code Online (Sandbox Code Playgroud)

Ste*_*nca 10

如果你使用

conn.getInputStream()

每次,java.io.FileNotFoundException当你的请求不成功时,它会抛出一个,基本上是任何400或更高的HTTP响应代码.在这种情况下,您的回复正文在于

conn.getErrorStream()

因此,在决定从哪个流中读取之前,必须先检查HTTP响应代码:

int status = conn.getResponseCode();
BufferedInputStream in;
if (status >= 400 ) {
    in = new BufferedInputStream( conn.getErrorStream() );
} else {
    in = new BufferedInputStream( conn.getInputStream() );
}
Run Code Online (Sandbox Code Playgroud)

我没有包括来自流的阅读,因为那是微不足道的:)