Я пытаюсь показать изображение в ImageView после просмотра его с телефона в рамках метода onActivityResult. Я объявлял свой ImageView непосредственно перед методом OnCreate, после того как нашел его по его идентификатору в макете и, наконец, хочу отобразить выбранное изображение. Но imgPreview все еще серый, и я вижу сообщение «личное поле ImageView никогда не назначается». Хотя я не получаю ссылку на проблему при настройке моего растрового изображения на imgPreview внутри onActivityResult.Android: NullPointerException с ImageView.setImageBitmap
Когда я пытаюсь отлаживать это приложение, возвращаясь в основное действие из операции pickup, я получаю 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 Переменная не имеет глобальной области (ее не public/static), это переменная экземпляра. –