2016-05-23 5 views
0

同じ問題を述べている多くの質問がありましたが、私のコードで何が間違っているかわからないようです。
私はUriを使用するのが初めてで、何が起こっているのか本当に理解していません。まず
、写真を撮るためにカメラのための活動を開始する責任があるコード:ファイルを書き込もうとしているときにENOENTエラーが発生する

void cameraAction() { 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    File f = new File(Environment.getExternalStorageDirectory(), "temp.jpg"); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f)); 
    startActivityForResult(intent, 1); 
    } 

問題が発生コード:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == RESULT_OK) { 
     if (requestCode == 1) { 
      File f = new File(Environment.getExternalStorageDirectory().toString()); 
      for (File temp : f.listFiles()) { 
       if (temp.getName().equals("temp.jpg")) { 
        f = temp; 
        break; 
       } 
      } 
      try { 
       Bitmap bitmap; 
       BitmapFactory.Options bitmapOptions = new BitmapFactory.Options(); 

       bitmap = BitmapFactory.decodeFile(f.getAbsolutePath(), 
         bitmapOptions); 

       viewImage.setImageBitmap(bitmap); 

       String path = Environment 
         .getExternalStorageDirectory() 
         + File.separator 
         + "Phoenix" + File.separator + "default"; 
       OutputStream outFile; 
       String fileName = "" + System.currentTimeMillis() + ".jpg"; 
       File file = new File(path, fileName); 
       try {//This is where the ENOENT error is shown 
        outFile = new FileOutputStream(file); 
        bitmap.compress(Bitmap.CompressFormat.JPEG, 85, outFile); 
        outFile.flush(); 
        outFile.close(); 
       } catch (FileNotFoundException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } else if (requestCode == 2) { 

     } 
    } 
} 
+0

* Phoenix/default/*フォルダは、外部ストレージに既に存在していますか? – adelphus

+0

@adelphus私はそうではないと思う、私は方法がディレクトリをそれ自身作成すると思った。早速のお返事ありがとうございます!あなたは私にこれを解決する方法を導くことができますか? –

+0

いいえ - 最初にディレクトリを作成する必要があります。 'File.mkdirs()'が役に立ちます。 – adelphus

答えて

1

はパスがmkdirs()を呼び出すことによって存在することを確認してくださいファイルを作成しようとする前に:

String path = Environment 
     .getExternalStorageDirectory() 
     + File.separator 
     + "Phoenix" + File.separator + "default"; 

if (new File(path).mkdirs()) { 
    OutputStream outFile; 
    String fileName = "" + System.currentTimeMillis() + ".jpg"; 
    File file = new File(path, fileName);   
    ... 
} 

マニフェストの許可を忘れないでください:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
+0

パーフェクト、ありがとう!、これを修正するために私の一日を無駄にすべきではありません。 –

関連する問題