2017-07-26 49 views
0

我正在使用來自Internal Storage的ImageView。流程是:如何知道我的InputStream是否正常工作或具有適當的值

1)檢查文件名內部存儲器中已經存在 2)如果是這樣,在ImageView的 3)如果不是,從URL下載,設置爲位圖的ImageView,並複製使用它作爲位圖流添加到文件中內部存儲

實際的代碼是

 try{ 
      InputStream fis = holder.mImageView.getContext().openFileInput("file.png"); 
      tempImageView.setImageBitmap(BitmapFactory.decodeStream(fis)); 
      fileFound = true; 
      fis.close(); 
     } 
     catch(IOException e){ 
      try{      
       FileOutputStream fos = holder.mImageView.getContext().openFileOutput("file.png",Context.MODE_APPEND); 
       thumbPhotoRef.getStream(
         new StreamDownloadTask.StreamProcessor() { 
          @Override 
          public void doInBackground(StreamDownloadTask.TaskSnapshot taskSnapshot, 
                 InputStream inputStream) throws IOException { 
           byte[] buffer = new byte[8192]; 
           int size; 
           tempImageView.setImageBitmap(BitmapFactory.decodeStream(inputStream)); 
           while ((size = inputStream.read(buffer)) != -1) { 
            fos.write(buffer, 0, size); 
           } 
           fos.close(); 
           // Close the stream at the end of the Task 
           inputStream.close(); 
          } 
         }); 
      } 
      catch(IOException e){ 

      } 
     } 

tempImageView是引用一個ImageView的佈局全局聲明ImageView的處理

羅gic在getStream方法中圖像位圖分配爲: tempImageView.setImageBitmap(BitmapFactory.decodeStream(inputStream));

這實際上工作和圖像在佈局中適當更新。請注意,在這種相同的方法中,相同的輸入流正被寫入指向「file.png」的「fos」FileOutputStream變量。

沒有錯誤或包括在調試中的任何內容,但不知何故,下次打開文件時,應該已經寫入文件,但未能設置ImageView的位圖。而且我確定該文件現在已存在,因爲openFileInput不會找到文件,但找不到異常。

InputStream fis = holder.mImageView.getContext().openFileInput("file.png"); 
      tempImageView.setImageBitmap(BitmapFactory.decodeStream(fis)); 

任何想法出了什麼問題,或者我如何獲得FIS變量的值,在調試模式下,看它是否實際包含由setImageBitmap是可以理解的任何位圖數據?謝謝

回答

0

解決了它。

剛發現InputStream實際上一旦使用就被消耗掉了。

我的解決方法就是再次讀取的InputStream,是由OutputStream的寫入早一點讓我得到一個副本:

       OutputStream fos = holder.mImageView.getContext().openFileOutput(path,Context.MODE_PRIVATE); 
           while ((size = inputStream.read(buffer)) != -1) { 
            fos.write(buffer, 0, size); 
           } 
           InputStream isCopy = tempImageView.getContext().openFileInput("file.png"); 
           tempImageView.setImageBitmap(BitmapFactory.decodeStream(isCopy)); 
相關問題