Java 在安卓系统上拍照时发生故障。为什么?

Java 在安卓系统上拍照时发生故障。为什么?,java,android,android-camera,android-image,Java,Android,Android Camera,Android Image,当我用我的设备拍照时,此代码在inputStream=行上崩溃,错误为java.lang.NullPointerException protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Uri uriImage; InputStream inputStream

当我用我的设备拍照时,此代码在
inputStream=
行上崩溃,错误为
java.lang.NullPointerException

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Uri uriImage;
    InputStream inputStream = null;
    ImageView imvCover = (ImageView)this.findViewById(R.id.imvCover);
    if ((requestCode == CAPTURE_IMAGE) && resultCode == Activity.RESULT_OK) {
        uriImage = data.getData();
        try {
            inputStream = getContentResolver().openInputStream(uriImage);
            Bitmap bitmap = BitmapFactory.decodeStream(inputStream, null, null);
            imvCover.setImageBitmap(bitmap);
        } catch (NullPointerException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        imvCover.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
        imvCover.setAdjustViewBounds(true);
    }
}
你知道为什么吗

这是我用来打开相机拍照的代码:

    Button btnTakePicture = (Button)this.findViewById(R.id.btnTakePicture);
    btnTakePicture.setOnClickListener(new OnClickListener() {
        public void onClick(View arg0) {
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(intent, CAPTURE_IMAGE);
        }
    });

这种方法可能不适用于所有设备。相反,您可以指定新图像的保存位置,然后使用预先确定的文件路径处理新图像

File tempFolder = new File(Environment.getExternalStorageDirectory().getAbsolutePath() 
    + "/your_folder");
tempFolder.mkdir();
file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() 
    + "/your_folder", String.valueOf(System.currentTimeMillis()) + ".jpg");
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
startActivityForResult(intent, TAKE_PICTURE);
试试这个

    Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        File out = Environment.getExternalStorageDirectory();
    out = new File(out, "newImage.jpg");
    i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(out));
    startActivityForResult(i, 1); 
这是一个活跃的结果

@Override
protected void onActivityResult(int requestCode, int resultcode, Intent intent)
{

 super.onActivityResult(requestCode, resultcode, intent);
File out = new File(Environment.getExternalStorageDirectory(), "newImage.jpg");

         if(!out.exists())
         {
          Log.v("log", "file not found");
          Toast.makeText(getBaseContext(),

          "Error while capturing image", Toast.LENGTH_LONG)

          .show();

        return;

       }

         Log.v("log", "file "+out.getAbsolutePath());
         File f = new File(out.getAbsolutePath());

         try {

    ExifInterface exif = new ExifInterface(out.getAbsolutePath());
     orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, 1);
    //Toast.makeText(getApplicationContext(), ""+orientation, 1).show();
    Log.v("log", "ort is "+orientation);

   } catch (IOException e)
   {
    e.printStackTrace();
   }
Bitmap photo =decodeFile(f,400,400);
  }
这是解码文件函数

public static Bitmap decodeFile(File f,int WIDTH,int HIGHT){
     try {
         //Decode image size
         BitmapFactory.Options o = new BitmapFactory.Options();
         o.inJustDecodeBounds = true;
         BitmapFactory.decodeStream(new FileInputStream(f),null,o);

         //The new size we want to scale to
         final int REQUIRED_WIDTH=WIDTH;
         final int REQUIRED_HIGHT=HIGHT;
         //Find the correct scale value. It should be the power of 2.
         int scale=1;
         while(o.outWidth/scale/2>=REQUIRED_WIDTH && o.outHeight/scale/2>=REQUIRED_HIGHT)
             scale*=2;

         //Decode with inSampleSize
         BitmapFactory.Options o2 = new BitmapFactory.Options();
         o2.inSampleSize=scale;
         return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
     } catch (FileNotFoundException e) {}
     return null;
 }

撞车是怎么回事?一些日志会有所帮助;正在返回null。data.getData()不是正确的调用吗?