2017-08-13 10 views
-1

カメラで画像をキャプチャすると、このコードでエラーが発生します。私は、デバイスストレージ内のMyImagesフォルダにサムネイルを保存したいと思います。エラーが発生しましたカメラからキャプチャした画像のサムネイルを作成したい

原因:java.lang.NullPointerException:file == null "at" fos = new FileOutputStream(thumbnailFile); forActivityResultのコードで

public class FragmentTwo extends Fragment { 
Button btn1, btn2; 
View v; 
File image; 
private static final int REQUEST_IMAGE_CAPTURE = 1; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    v = inflater.inflate(R.layout.fragment_two, container, false); 
    btn1 = (Button) v.findViewById(R.id.btn1); 
    btn2 = (Button) v.findViewById(R.id.btn2); 

    btn1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 


      File file = new File(Environment.getExternalStorageDirectory(), "MyImages"); 
      file.mkdirs(); 

      File image = new File(file, "picture1" + ".jpg"); 
      Uri uriSavedImage = Uri.fromFile(image); 
      i.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage); 
      startActivityForResult(i, REQUEST_IMAGE_CAPTURE); 
     } 
    }); 


    btn2.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      File imagesFolder = new File(Environment.getExternalStorageDirectory(), "MyImages"); 
      imagesFolder.mkdirs(); 

      File image = new File(imagesFolder, "picture2" + ".jpg"); 
      Uri uriSavedImage = Uri.fromFile(image); 

      i.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage); 

      startActivity(i); 
     } 
    }); 
    return v; 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    final int THUMBSIZE = 64; 
Bitmap thumbnail = ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile("/MyImages/picture1"), 
     THUMBSIZE, THUMBSIZE); 

File thumbnailFile = image; 
    FileOutputStream fos = null; 
    try { 
     fos = new FileOutputStream(thumbnailFile); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 

    thumbnail.compress(Bitmap.CompressFormat.JPEG, 90, fos); 
    try { 
     fos.flush(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    try { 
     fos.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

} 

答えて

0

どこイメージを保存するカメラアプリを伝えるためFileを作成するためのコードは次のようになります作成するための

 File imagesFolder = new File(Environment.getExternalStorageDirectory(), "MyImages"); 
     imagesFolder.mkdirs(); 

     File image = new File(imagesFolder, "picture2" + ".jpg"); 

あなたのコード画像を復号化するための全く同じでないFileは、次のようになります。

 "/MyImages/picture1" 
最初 Environment.getExternalStorageDirectory()を有する

  • 、及び第二の

  • 最初.jpg拡張子がない、および第2の

しない:

これらは同じではありませんその結果、BitmapFactoryはこのファイルを見つけられません。

また、実際にはonActivityResult()で肯定的な結果が得られているかどうかを確認していません。ユーザーが写真を撮らないことを決定し、BACKを押してカメラの動作を終了すると、写真は表示されません。

File thumbnailFile = image; 

あなたはimageフィールドに値を割り当てることはありませんし、そうimagenullあり、thumbnailFilenullあり、そしてあなたがFileOutputStreamを作成しようとするとクラッシュします:

また、これは動作しません。 。これを修正するには、File image = new File(file, "picture1" + ".jpg");の場合はimage = new File(file, "picture1" + ".jpg");に置き換えます。imageという名前のローカル変数を作成するのではなく、imageという名前のフィールドに値を割り当てます。

さらに問題が発生します(Android 7.0以降ではUri.fromFile()は使用できません。カメラアプリがフォアグラウンドで終了している場合は処理できません)。

+0

どのように修正する必要がありますか? @CommonsWare – Abhi

関連する問題