Android:使用ImageView.setImageBitmap

时间:2016-06-29 13:57:58

标签: android nullpointerexception imageview onactivityresult

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

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



}

2 个答案:

答案 0 :(得分:2)

sort_by

在此重新声明dataframe.to_csv(data,sep="",index=False,header=False,encoding='ascii', float_format='%10.4f',quoting=csv.QUOTE_NONE, escapechar=" ", mode='a+') 。从该行的开头删除ImageView imgPreview = (ImageView) findViewById(R.id.imageView); ,它应该可以正常工作。所以:

imgPreview

然后它将正确引用班级ImageView

答案 1 :(得分:2)

从:

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

删除:

imgPreview

永远不会定义实例变量,并且您已在ImageView imgPreview = (ImageView) findViewById(R.id.imageView); 中定义了一个局部变量。