2013-08-20 64 views
0

我已經通過服務下載了一些png文件,現在我正在嘗試使用它們。他們進入用戶的SD卡。我已驗證每個文件都在卡上。但是,當我嘗試將它們中的任何一個設置爲ImageView時,我會得到空白區域。下載的png文件不可讀

因此,我通過手動嘗試使用手機的圖片查看器在手機上顯示它們,發現文件完好無損。沒有任何文件會打開。我想知道的是,如果我在下載需要發生的文件以使它們可以看作png文件(或位圖文件)後缺少任何步驟。這裏是我服務的代碼,我用它來下載文件:

public class DownloadPicture extends IntentService { 

    private int result = Activity.RESULT_CANCELED; 
    public static final String FILENAME = "filename"; 
    public static final String FILEPATH = "filepath"; 
    public static final String RESULT = "result"; 
    public static final String NOTIFICATION "com.mydomain.myapp.MyBroadcastReceiver"; 

    public DownloadPicture() { 
     super("DownloadPicture"); 
    } 

    public DownloadPicture(String name) { 
     super(name); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 

     String fileName = intent.getStringExtra(FILENAME); 
     String urlPath = this.getResources().getString(R.string.imagesURL) + fileName; 
     System.err.println("starting download of: " + fileName); 
     System.err.println(urlPath); 
     File output = new File(Environment.getExternalStorageDirectory(), fileName); 
     if (output.exists()) {output.delete();} 

     InputStream stream = null; 
     FileOutputStream fos = null; 
     try { 
      URL url = new URL(urlPath); 
      stream = url.openConnection().getInputStream(); 
      InputStreamReader reader = new InputStreamReader(stream); 
      fos = new FileOutputStream(output.getPath()); 
      int next = -1; 
      while ((next = reader.read()) != -1) { 
      fos.write(next); 
      } 

      //Maybe I need to do something else here???? 

      // Successful finished 
      result = Activity.RESULT_OK; 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      if (stream != null) { 
      try { 
       stream.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      } 
      if (fos != null) { 
      try { 
       fos.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      } 
     } 

     publishResults(output.getName(), output.getAbsolutePath(), result); 
    } 
} 
+0

的代碼似乎是正確的。你確定urlPath指向一個PNG文件嗎?你有沒有試過用瀏覽器下載它? –

+0

對於這兩個問題都可以。另外,當我使用手機的文件管理器應用程序直接導航到SD卡時,它的擴展名爲.png。 – Alex

+0

嘗試在您的PC中下載,然後與設備中下載的文件進行比較。可能存在連接問題,並且該文件可能已損壞。我認爲它不會受到影響,但是嘗試讀取輸入流並使用幾個字節的緩衝區(而不是一次一個字節)寫入輸出流,並在關閉輸出流之前嘗試刷新。 –

回答