2016-03-27 6 views
6

私は写真を撮るための簡単なアプリケーションを作成しています。BitmapFactory:ストリームをデコードできません:java.io.FileNotFoundException実際にファイルがある場合でも

03-27 00:43:30.498 30526-30526/myapplication.example.falcoleo.cameratest1 D/MAIN ACTIVITY: file:///storage/emulated/0/cameratest/picture459838058.jpg 
03-27 00:43:30.499 30526-30526/myapplication.example.falcoleo.cameratest1 E/BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: file:/storage/emulated/0/cameratest/picture459838058.jpg: open failed: ENOENT (No such file or directory) 

推測このディレクトリがある場合:これは私のコード

Button b1; 
ImageView iv; 
String TAG = "MAIN ACTIVITY"; 

File photo; 
private Uri mImageUri; 


private File createTemporaryFile(String part, String ext) throws Exception { 


    File externalStorageDirectory = Environment.getExternalStorageDirectory(); 
    File tempDir = new File(externalStorageDirectory + "/cameratest/"); 
    if (!tempDir.exists()) { 
     tempDir.mkdir(); 

    } 
    return File.createTempFile(part, ext, tempDir); 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    b1 = (Button) findViewById(R.id.button); 
    iv = (ImageView) findViewById(R.id.imageView); 

    b1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 

      try { 
       // place where to store camera taken picture 
       photo = createTemporaryFile("picture", ".jpg"); 
       photo.delete(); 
      } catch (Exception e) { 
       Log.v(TAG, "Can't create file to take picture!"); 
       Toast.makeText(getApplicationContext(), "Please check SD card! Image shot is impossible!", 
         Toast.LENGTH_SHORT).show(); 

      } 

      mImageUri = Uri.fromFile(photo); 
      intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri); 

      startActivityForResult(intent, 0); 
     } 
    }); 
} 

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // TODO Auto-generated method stub 
    super.onActivityResult(requestCode, resultCode, data); 


    if (requestCode == 0 && resultCode == RESULT_OK) { 



     Log.d(TAG, mImageUri.toString()); 
     Bitmap bitmap = BitmapFactory.decodeFile(mImageUri.toString()); 
     iv.setImageBitmap(bitmap); 

    } 


} 

あなたは私はこのdirecoryを参照してください(FileNotFoundExceptionとしても)終わりとlogcatにeLog.d(TAG, mImageUri.toString());を追加しました見ることができるようです存在するか? spoler alertit does。そして、画像がBitmapFactory.decodeFileの後に作成されたようではありません。私は本当に何が間違っているのか分かりません。実際に写真を表示する必要がある場合を除いてすべて正常に動作し、表示されません。ただ空白。 WTF m8のように、私はちょうど私の仕事を狂って行く必要がないようにしようとしています、あなたは知っています。

+0

外部メモリに読み書きする権限がありますか? – F43nd1r

+0

私は許可を持っています – Leo300

答えて

7

mImageUri.toString()mImageUri.getPath()に置き換えます。

decodeFileには、URI文字列ではなく、パスが必要です。

+0

これは優雅な解決策です。ありがとう:) – Leo300

4
file:///storage/emulated/0/cameratest/picture459838058.jpg 

decodeFile()がファイルシステムパスを必要とするため、file://を削除します。

/storage/emulated/0/cameratest/picture459838058.jpg 
+1

それは正常に動作します。私は 'string.replace(" file:// "、" ")'を使用しました。より洗練されたソリューションはありますか? – Leo300

関連する問題