2012-04-04 16 views
1

なぜこのエラーが発生するのかわかりません。私はネット上で答えを探してみましたが、成功しませんでした。ストリームが閉じられたJava.io.IOExceptionに移動するのはなぜですか?

以下は、エラーが発生している部分コードです。私はヘッダーを送信しており、200の応答が成功すると、残りのコードを実行します。

URL url; 
     HttpURLConnection connection = null;   
     try{ 


//Create connection 

     url = new URL(targetURL); 
     Log.i(TAG,"Connecting to : "+targetURL); 
     connection = (HttpURLConnection)url.openConnection(); 

     //connection.setRequestMethod("POST"); 
     connection.setRequestProperty("Content-Type", 
        "application/x-www-form-urlencoded"); 
     connection.setRequestProperty("Content-Language", "en-US"); 
     connection.setRequestProperty("User-Agent", 
       "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11"); 


     connection.setRequestProperty("x-device-displayheight", device_displayheight); 

      connection.setUseCaches(false); 
      connection.setDoInput(true); 
      connection.setDoOutput(true); 
InputStream is = connection.getInputStream(); 
      BufferedReader br = new BufferedReader(new InputStreamReader(is)); 
      StringBuffer response = new StringBuffer(); 
      String rep = connection.getResponseMessage(); 
      int respcode = connection.getResponseCode(); 
      String line; 

     try{       
      if(respcode == 200){// Everything is ok        
       if(is != null){ 
        //response.append(is.toString()); 

        while((line = br.readLine()) != null){ 
         Log.i("Output",line); 
        } 

       } 
       else{ 
        Log.i("Nothing to parse",""); 
       } 


      } 
      else{// bad response from server 
       Log.i("Bad Response", rep +" : "+respcode); 
      } 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 

//スタックトレース

04-04 13:14:41.668: W/System.err(23046): java.io.IOException: stream closed 
04-04 13:14:41.668: W/System.err(23046): at org.apache.harmony.luni.internal.net.www.protocol.http.AbstractHttpInputStream.checkNotClosed(AbstractHttpInputStream.java:69) 
04-04 13:14:41.668: W/System.err(23046): at org.apache.harmony.luni.internal.net.www.protocol.http.FixedLengthInputStream.read(FixedLengthInputStream.java:41) 
04-04 13:14:41.668: W/System.err(23046): at java.io.InputStreamReader.read(InputStreamReader.java:248) 
04-04 13:14:41.668: W/System.err(23046): at java.io.BufferedReader.fillBuf(BufferedReader.java:130) 
04-04 13:14:41.668: W/System.err(23046): at java.io.BufferedReader.readLine(BufferedReader.java:357) 
04-04 13:14:41.668: W/System.err(23046): at com.ameba.api.network.Client.executePost(Client.java:95) 
04-04 13:14:41.668: W/System.err(23046): at com.ameba.api.activityClasses.Login$connectToServer.doInBackground(Login.java:190) 
04-04 13:14:41.672: W/System.err(23046): at com.ameba.api.activityClasses.Login$connectToServer.doInBackground(Login.java:1) 
04-04 13:14:41.672: W/System.err(23046): at android.os.AsyncTask$2.call(AsyncTask.java:252) 
04-04 13:14:41.672: W/System.err(23046): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
04-04 13:14:41.672: W/System.err(23046): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
04-04 13:14:41.672: W/System.err(23046): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1081) 
04-04 13:14:41.672: W/System.err(23046): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:574) 
04-04 13:14:41.672: W/System.err(23046): at java.lang.Thread.run(Thread.java:1020) 
+1

スタックトレースを表示してください。 –

+0

@SteveKuo私はスタックトレースを追加しました。 – Fabii

+1

'InputStream is = connection.getInputStream();の前に' connection.connect(); 'を呼び出しました。 行 –

答えて

1

System.setProperty("http.keepAlive", "false");は、問題を解決しているように見えます。  

0

有効な流れを持っている場合にのみ異なるため、ループで物事をやってみてください。

URL url; 
     HttpURLConnection connection = null;   
     try{ 


//Create connection 

     url = new URL(targetURL); 
     Log.i(TAG,"Connecting to : "+targetURL); 
     connection = (HttpURLConnection)url.openConnection(); 

     //connection.setRequestMethod("POST"); 
     connection.setRequestProperty("Content-Type", 
        "application/x-www-form-urlencoded"); 
     connection.setRequestProperty("Content-Language", "en-US"); 
     connection.setRequestProperty("User-Agent", 
       "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11"); 


     connection.setRequestProperty("x-device-displayheight", device_displayheight); 

      connection.setUseCaches(false); 
      connection.setDoInput(true); 
      connection.setDoOutput(true); 
        InputStream is = connection.getInputStream(); 
      StringBuffer response = new StringBuffer(); 
      String rep = connection.getResponseMessage(); 
      int respcode = connection.getResponseCode(); 
      String line; 
        BufferedReader br = null; 

     try{    
          //use a constant below instead of 200   
      if(respcode == 200){// Everything is ok        
       if(is != null){ 
         br = new BufferedReader(new InputStreamReader(is)); 

        //response.append(is.toString()); 

        while((line = br.readLine()) != null){ 
         Log.i("Output",line); 
        } 

       } 
       else{ 
        Log.i("Nothing to parse",""); 
       } 


      } 
      else{// bad response from server 
       Log.i("Bad Response", rep +" : "+respcode); 
      } 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } finally { 
         if(br != null) { br.close() }; 
        } 
関連する問題