Android: ImageView.setImageBitmap 出现 NullPointerException

Android: NullPointerException with ImageView.setImageBitmap

我试图在 onActivityResult 方法中从 phone 浏览图片后在 ImageView 中显示图片。我在 OnCreate 方法之前声明了我的 ImageView,在我通过布局上的 ID 找到它并最终想要显示所选图像之后。但是 imgPreview 仍然是灰色的,我可以看到消息 "private field ImageView is never assigned"。虽然我在 onActivityResult 中的 imgPreview 上设置我的位图时没有遇到参考问题。

当我尝试调试此应用程序时,从拾音器 activity 返回主 activity 时,我得到 java.lang.NullPointerException。如果我声明

ImageView imgPreview = (ImageView) findViewById(R.id.imageView);

另外在 OnActivityResult 中我没有收到错误。你能解释一下为什么会这样吗?当我想使用它时,我是否应该在方法中每次都找到 imgPreview ?整个代码片段如下。

public class MainActivity extends AppCompatActivity implements TaskComplete {

private static final int BROWSE_PIC_REQUEST_CODE = 300;
private ImageView imgPreview;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ImageView imgPreview = (ImageView) findViewById(R.id.imageView);
}


public void onClick3(View view) {

    Intent i = new Intent(
            Intent.ACTION_PICK,
            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

    startActivityForResult(i, BROWSE_PIC_REQUEST_CODE);

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

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

        Uri selectedImage = data.getData();
        String[] filePathColumn = { MediaStore.Images.Media.DATA };

        Cursor cursor = getContentResolver().query(selectedImage,
                filePathColumn, null, null, null);
        cursor.moveToFirst();

        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
        String picturePath = cursor.getString(columnIndex);
        cursor.close();

        BitmapFactory.Options options = new BitmapFactory.Options();

        options.inSampleSize = 4;


        try {

                 imgPreview.setImageBitmap(BitmapFactory.decodeFile(picturePath,options));}
        catch (Exception e) {
            Log.e("test",e.toString());
        }

     else { some code };



}
ImageView imgPreview = (ImageView) findViewById(R.id.imageView);

您在此重新声明imgPreview。从该行的开头删除 ImageView ,它应该可以工作。所以:

imgPreview = (ImageView) findViewById(R.id.imageView);

那么它将正确引用 class 级别 imgPreview

来自:

ImageView imgPreview = (ImageView) findViewById(R.id.imageView);

删除:

ImageView 

从未定义实例变量,您在 onCreate() 中定义了一个局部变量。