我试图在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 };
}
答案 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);
中定义了一个局部变量。