【问题标题】:JAVA EOFException when getInputStream from POST从 POST 获取输入流时出现 JAVA EOFException
【发布时间】:2013-08-01 10:22:07
【问题描述】:

我试图从 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();
        }

而 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)

【问题讨论】:

    标签: java android exception post


    【解决方案1】:

    如果你使用

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

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

    【讨论】:

      【解决方案2】:

      我在我的应用程序中使用了一次 http post,使用此代码,它运行良好。如果你愿意,你可以试试。

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

      【讨论】:

      • 试试为什么?你的答案是什么?
      • 我在我的应用程序中使用过一次http post...并且使用此代码效果很好,如果您愿意,可以尝试
      猜你喜欢
      • 2019-10-03
      • 2010-10-14
      • 1970-01-01
      • 2015-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-05
      • 2015-11-15
      相关资源
      最近更新 更多