从POST获取InputStream时发生JAVA EOFEException

从POST获取InputStream时发生JAVA EOFEException,java,android,exception,post,Java,Android,Exception,Post,我正试图从POST中获取响应,但当我输入时,抛出和异常 try { conn = (HttpURLConnection) url.openConnection(); conn.setDoOutput(true); conn.setDoInput(true); // Marcamos a 3s el tiempo maximo de espera conn.setRea

我正试图从POST中获取响应,但当我输入时,
抛出
异常

     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();
        }
日志标签显示:

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)

我在我的应用程序中使用了一次HTTPPOST,使用了这段代码,效果很好。如果你愿意,你可以试试

public void posthttp()
{

    URL= your url
    InputStream is = null;
    String val1;
    String val2;
    ArrayList<NameValuePair> namevaluepair =new  ArrayList<NameValuePair>();

    //Making HTTP request
    try {
        // defaultHttpClient
        DefaultHttpClient httpClient = new DefaultHttpClient();

        namevaluepair.add(new BasicNameValuePair("val1",val1));
        namevaluepair.add(new BasicNameValuePair("val2",val2));


        String enc_url = urlEncode(URL);
        HttpPost httpPost = new HttpPost(enc_url );

         httpPost.setEntity(new UrlEncodedFormEntity(namevaluepair));
         HttpResponse httpResponse = httpClient.execute(httpPost);
         HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();            

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line);
        }
        is.close();
        String responseFromServer = sb.toString();

    } catch (Exception e) {
        Log.e("Buffer Error", "Error converting result " + e.toString());
    }

}
public void posthttp()
{
URL=您的URL
InputStream=null;
字符串val1;
字符串val2;
ArrayList namevaluepair=新的ArrayList();
//发出HTTP请求
试一试{
//defaultHttpClient
DefaultHttpClient httpClient=新的DefaultHttpClient();
添加(新的BasicNameValuePair(“val1”,val1));
添加(新的BasicNameValuePair(“val2”,val2));
字符串enc_url=urlEncode(url);
HttpPost HttpPost=新的HttpPost(enc_url);
setEntity(新的UrlEncodedFormEntity(namevaluepair));
HttpResponse HttpResponse=httpClient.execute(httpPost);
HttpEntity HttpEntity=httpResponse.getEntity();
is=httpEntity.getContent();
}捕获(不支持的编码异常e){
e、 printStackTrace();
}捕获(客户端协议例外e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
试一试{
BufferedReader reader=新的BufferedReader(新的InputStreamReader(
is,“iso-8859-1”),8);
StringBuilder sb=新的StringBuilder();
字符串行=null;
而((line=reader.readLine())!=null){
某人附加(行);
}
is.close();
字符串responseFromServer=sb.toString();
}捕获(例外e){
Log.e(“缓冲区错误”,“错误转换结果”+e.toString());
}
}
如果您使用

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() );
}

我没有包括从流中读取的内容,因为这很简单:)

试试看为什么?你的答案是什么?我曾经在我的应用程序中使用过http post。。。使用此代码效果很好,如果您愿意,可以尝试