【问题标题】:Android: NullPointerException with ImageView.setImageBitmapAndroid:带有 ImageView.setImageBitmap 的 NullPointerException
【发布时间】:2016-06-29 13:57:58
【问题描述】:

我试图在 onActivityResult 方法中从手机浏览图片后在 ImageView 中显示图片。我在 OnCreate 方法之前声明了我的 ImageView,在我通过布局上的 ID 找到它并最终想要显示所选图像之后。但是 imgPreview 仍然是灰色的,我可以看到消息“从未分配私有字段 ImageView”。虽然我在 onActivityResult 中的 imgPreview 上设置我的位图时没有遇到参考问题。

当我尝试调试此应用程序时,从拾取活动返回主活动时,我得到 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 };



}

【问题讨论】:

  • 你有一个同名的局部和全局变量imgPreview。只需删除本地声明。它应该可以正常工作。
  • 我已经知道了。谢谢
  • @KNeerajLal 该变量没有全局范围(它不是公共/静态的),它是一个实例变量。
  • @MarkKeen 是的,我的意思是实例变量。我的错。 :)

标签: android nullpointerexception imageview onactivityresult


【解决方案1】:
ImageView imgPreview = (ImageView) findViewById(R.id.imageView);

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

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

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

【讨论】:

    【解决方案2】:

    来自:

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

    删除:

    ImageView 
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-17
      相关资源
      最近更新 更多