应用程序崩溃:ACTION_IMAGE_CAPTURE android studio java class 中的修改器问题

App Crash :ACTION_IMAGE_CAPTURE issue with modifiers in android studio java class

大家好 我是 android 开发新手,我有一个使用简单 intent 拍照的代码。

public class MainActivity extends AppCompatActivity {

 ImageView mImageView =(ImageView)findViewById(R.id.image_view_taken_picture);
 static final int request=1;

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

public void takePicture(View view )
{
    Intent i_picture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if(i_picture.resolveActivity(getPackageManager())!=null)
    {
        startActivityForResult(i_picture,request);
    }

}

protected void onActivityResult(int requestCode, int resultCode, Intent dat) {

    if(requestCode==request && resultCode==RESULT_OK)
    {
        Bundle extra = dat.getExtras();
        Bitmap image = (Bitmap)extra.get("data");
        mImageView.setImageBitmap(image);

    }
}

}

但我总是得到 不幸的是,应用已停止 我知道问题出在 java class 更具体地说是前两个 Variables ImageView 和 int
任何帮助! 提前致谢...

您的 ImageView 初始化行首先崩溃,您无法在 setContentView(R.layout.activity_main); 之前初始化您的视图,因为在此行之前 activity 甚至不知道任何 XML 附加到它所以 activity 会说 "hey i don't have anything like R.id.image_view_taken_picture 'cuz i don't have any XML layout"

ImageView mImageView =(ImageView)findViewById(R.id.image_view_taken_picture); // crash

setContentView

之后onCreate进行初始化
ImageView mImageView ;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mImageView =(ImageView)findViewById(R.id.image_view_taken_picture);
    }

其次,您不必将视图传递给 takePicture 函数

public void takePicture()
{
    Intent i_picture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if(i_picture.resolveActivity(getPackageManager())!=null)
    {
        startActivityForResult(i_picture,request);
    }

}

现在只要想拍照就这样称呼takePicture()