2017-07-26 1 views
0

私は内部ストレージからImageViewを使用しています。フローは次のとおりです。私のInputStreamが動作しているか、適切な値を持っているかを知る方法

1)内部ストレージ内のファイル名が既に 2を存在する場合、それは、ImageViewの 3にビットマップとしてそれを使用しない場合)確認してください)そうでない場合は、URLからダウンロードし、ImageViewのにビットマップ、およびコピーとして設定しますtempImageViewレイアウト

LOでImageViewのに参照しているグローバルに宣言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){ 

      } 
     } 

として内部ストレージ内のファイルへのストリーム

実際のコードがありますImage Bitmapが割り当てられるgetStreamメソッド内のgic。 tempImageView.setImageBitmap(BitmapFactory.decodeStream(inputStream));

これは実際には機能し、画像はレイアウト内で適切に更新されます。この同じメソッドでは、同じ入力ストリームが "file.png"を指す "fos" FileOutputStream変数に書き込まれていることに注意してください。

デバッグには何も問題はありませんが、何らかの形で、ファイルが開かれたときに既にImageViewのビットマップを設定できませんでした。 openFileInputはファイルに移動しないため、ファイルが存在していると確信しています。Exceptionはもう見つかりません。

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

どれ何が悪かったのかアイデア、またはどのように私はそれが実際にsetImageBitmapが理解できる任意のビットマップデータが含まれている場合、デバッグモードでの変数FISの値が見ることができますか?ありがとう

答えて

0

解決しました。

ただ一度使用されると、実際にはInputStreamが消費されることがわかりました。

私のソリューションは、ちょうど私がコピーを取得したいように、それは以前のOutputStreamによって書かれた、再びInputStreamを読むことです:

       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)); 
関連する問題