我正在编写一个代码,使用户可以从图库中选择个人资料图片。到目前为止,代码如下。
(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));
}
}
答案 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));