2012-04-04 58 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

請向我們展示堆棧跟蹤。 – 2012-04-04 18:13:54

+0

@SteveKuo我剛剛添加堆棧跟蹤 – Fabii 2012-04-04 18:17:17

+1

在InputStream is = connection.getInputStream()之前調用'connection.connect();'' line – 2012-04-04 18:33:09

回答

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() }; 
        } 
相關問題