2015-02-11 51 views
2
try { 

    Log.d("TEST", "start converting..."); 

    File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "out.pdf"); 
    file.createNewFile(); 
    OutputStream out = new FileOutputStream(file); 

    int read = 0; 
    byte[] bytes = new byte[1024]; 

    while ((read = resp.getBody().in().read(bytes)) != -1) { 
     out.write(bytes, 0, read); 
     Log.d("TEST", "looping"); 
    } 

    Log.d("TEST", "finish converting"); 

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

上面的代碼應該從輸入流創建一個PDF文件。然而它被卡在while循環中。它打印Android,創建文件從輸入流掛在循環內

looping 

所有的時間。任何想法什麼是錯的?

+0

什麼類型的RESP變量? – Hunsu 2015-02-11 19:16:48

+0

@DerGolem只是一個輸入錯誤 – 2015-02-11 19:20:14

+0

@ user230137它的類型響應,改造響應對象 – 2015-02-11 19:20:49

回答

2

在此基礎上的javadoc TypedInput:

讀取字節流。除非另有說明,否則此方法可能只會調用一次 。主叫方有責任關閉流 。

我猜想調用in()會每次創建一個新的InputStream。因此,你永遠不會離開while循環,因爲每次都會有一個新的InputStream。

相反,只需調用在()一次像這樣,看看是否能解決的事情:

InputStream in = null; 

    try { 

     Log.d("TEST", "start converting..."); 

     File file = new File(
       Environment 
         .getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), 
       "out.pdf"); 
     file.createNewFile(); 
     OutputStream out = new FileOutputStream(file); 

     int read = 0; 
     byte[] bytes = new byte[1024]; 

     in = resp.getBody().in(); 

     while ((read = in.read(bytes)) != -1) { 
      out.write(bytes, 0, read); 
      Log.d("TEST", "looping"); 
     } 

     Log.d("TEST", "finish converting"); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     if (in != null) { 
      in.close(); 
     } 
    }