从Android库中选择一张图片

时间:2015-07-13 13:07:40

标签: android imageview android-imageview

我正在编写一个代码,使用户可以从图库中选择个人资料图片。到目前为止,代码如下。

(1)在活动下的字段中,我宣布了一个按钮,一个imageview和一个静态整数。

QFile MyFile("text.txt");
MyFile.open(QIODevice::ReadWrite);
QTextStream in (&MyFile);

while(!MyFile.atEnd())
  { //do something to search string inside }

MyFile.close();

(2)现在,我通过onCreate方法在屏幕上实际看到它们。

private Button btnChooseProfile;
private ImageView ivProfile;
private static final int RESULT_LOAD_IMAGE = 1;

(3)最后,我重写了onActivityResult方法,以定义点击btnChooseProfile按钮后发生的事情。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate();
    setContentView(R.layout.activity_register);

    btnChooseProfile = (Button) findViewById(R.id.btnChooseProfile);
    ivProfile = (ImageView) findViewById(R.id.ivProfile);

    btnChooseProfile.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            startActivityForResult(intent, RESULT_LOAD_IMAGE);
        }
};

当我运行代码时,我设法访问该库。选择图像后,我希望imageview包含一个选定的图片,但不知何故,应用程序才会结束。

我已经阅读了网站上建议的很多解决方案,并且代码片段本身似乎没有问题。如果我遗失了什么,请给我一些建议,非常感谢。

谢谢。

编辑这里是logcat。 (日志级别:调试)

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
            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 imagePath = cursor.getString(columnIndex);
            cursor.close();

            ivProfile.setImageBitmap(BitmapFactory.decodeFile(imagePath));
        }
    }

3 个答案:

答案 0 :(得分:0)

我不会在onActivityResult中执行所有这些操作...它是主线程,因此不建议访问DB(ContentProvider)和解码位图。启动AsyncTask或其他东西。

有时返回的数据为空(是的,它会发生) - 使您的代码为null安全。添加一些日志。

我相信你应该做得很好。

答案 1 :(得分:0)

这可能是一个大图片尺寸的问题。请尝试使用此代码来缩小图片大小。

 Bitmap photo;
        File file = new File(picturePath);
        int file_size = Integer
                .parseInt(String.valueOf(file.length() / 1024));
        if (file_size > 2048)
        {
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inSampleSize = 4;
            photo = BitmapFactory.decodeFile(picturePath, options);
        } else if (file_size > 1024)
        {
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inSampleSize = 2;
            photo = BitmapFactory.decodeFile(picturePath, options);
        } else
            photo = BitmapFactory.decodeFile(picturePath);
        ivProfile.setImageBitmap(photo);

答案 2 :(得分:0)

echo $this->Form->input('supplier_id', array('empty'=>'Select', 'required' => true));