【问题标题】:Android ImageView can't get image from gallery or cameraAndroid ImageView 无法从图库或相机中获取图像
【发布时间】:2018-03-30 02:26:48
【问题描述】:

我想从 Android 上的图库或相机中选择一张照片并在 ImageView 上显示照片,打开图库或相机很好,并且权限没有问题。但问题是,我选择或从相机拍摄的图片没有显示在 ImageView 上,并且没有错误。

下面是我的代码

private static final int CAMERA_REQUEST_CODE = 1;
private static final int SELECT_FILE = 0;

public PersonalDataStep(){
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.personal_data_step, container, false);
    ButterKnife.bind(this, view);

    //imageEktp.setClickable(true);

    getPhoto.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //Log.d("test : ", "testing");
            CharSequence menu[] = new CharSequence[]{"Take From Galery", "Open Camera"};
            AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
            builder.setTitle("Pick a Picture");
            builder.setItems(menu, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    if(i == 0){
                        Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                        intent.setType("image/*");
                        startActivityForResult(intent, SELECT_FILE);
                    }else if(i == 1){
                        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                        startActivityForResult(intent, CAMERA_REQUEST_CODE);

                    }
                }
            });
            builder.show();
        }
    });

    return view;
}

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

    if(resultCode== Activity.RESULT_OK) {
        if (resultCode == CAMERA_REQUEST_CODE) {
            Bundle bundle = data.getExtras();
            final Bitmap bitmap = (Bitmap) bundle.get("data");
            imageEktp.setImageBitmap(bitmap);
        } else if (resultCode == SELECT_FILE) {
            Uri selectedImage = data.getData();
            imageEktp.setImageURI(selectedImage);
            Log.d("image from galery : ", selectedImage.toString());
        }
    }else{
        Toast.makeText(getActivity(), "You haven't picked Image",Toast.LENGTH_LONG).show();
    }
}

【问题讨论】:

  • 那么,logcat 的结果是什么?
  • logcat 没问题,没有错误
  • 你得到了你生成的 Log "image from gal....."?
  • 可以显示日志吗?
  • 可以在位图中设置imageview吗?

标签: android android-imageview


【解决方案1】:

代码中的小错字

if (resultCode == CAMERA_REQUEST_CODE) {
 ...
} else if (resultCode == SELECT_FILE) {
 ...
}

应该是

if (requestCode == CAMERA_REQUEST_CODE) {
 ...
} else if (requestCode == SELECT_FILE) {
 ...
}

【讨论】:

  • 感谢您的回复,抱歉我没有注意到
【解决方案2】:

试试这个代码:

@Override
 public void onActivityResult(int requestCode, int resultCode, Intent data) {
 super.onActivityResult(requestCode, resultCode, data);
 if (resultCode == Activity.RESULT_OK) {
 if (requestCode == SELECT_FILE)
    onSelectFromGalleryResult(data);
 else if (requestCode == REQUEST_CAMERA)
    onCaptureImageResult(data);
 }
 }
@SuppressWarnings("deprecation")
private void onSelectFromGalleryResult(Intent data) {
 Bitmap bm=null;
 if (data != null) {
 try {
    bm=MediaStore.Images.Media.getBitmap(getApplicationContext().getContentResolver(), 
data.getData());
 } catch (IOException e) {
    e.printStackTrace();
 }
 }
 ivImage.setImageBitmap(bm);
  }
 private void onCaptureImageResult(Intent data) {
 Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
 ByteArrayOutputStream bytes = new ByteArrayOutputStream();
 thumbnail.compress(Bitmap.CompressFormat.JPEG, 90, bytes);
 File destination = new File(Environment.getExternalStorageDirectory(),
    System.currentTimeMillis() + ".jpg");
 FileOutputStream fo;
 try {
 destination.createNewFile();
 fo = new FileOutputStream(destination);
 fo.write(bytes.toByteArray());
 fo.close();
 } catch (FileNotFoundException e) {
 e.printStackTrace();
 } catch (IOException e) {
 e.printStackTrace();
 }
 ivImage.setImageBitmap(thumbnail);
 }

我认为这对您有帮助,请检查您的代码一次。

【讨论】:

    【解决方案3】:

    试一试,对你的方法稍作改动,对我来说效果很好。

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    
        if(resultCode== Activity.RESULT_OK) {
            if (requestCode == CAMERA_REQUEST_CODE && data! = null) {
                Uri mImageCaptureUri = data.getData();
                 imageEktp.setImageURI(mImageCaptureUri);
            } else if (requestCode == SELECT_FILE && data != null) {
                Uri selectedImage = data.getData();
                imageEktp.setImageURI(selectedImage);
                Log.d("image from galery : ", selectedImage.toString());
            }
        }else{
            Toast.makeText(getActivity(), "You haven't picked Image",Toast.LENGTH_LONG).show();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多