从照片库中检索照片
问题描述:
我发现了这段代码,并试图在我的应用程序中实现,它打开画廊,让我选择一张照片,然后应用程序停止工作并关闭。从照片库中检索照片
这是我第一次尝试上传图像到mysql,我一开始就卡住了。
buttonChoose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
showFileChooser();
}
});
private void showFileChooser() {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null)
{
Uri filePath = data.getData();
try
{
bitmap = MediaStore.Images.Media.getBitmap(MainActivity.this.getContentResolver(), filePath);
} catch (IOException e) {
e.printStackTrace();
}
imageView.setImageBitmap(bitmap);
}
}
答
Uri filePath = data.getData();
这将是毫无意义的大多数Uri
值。
从Uri
填充ImageView
的最佳解决方案是使用a third-party image loading library,如Picasso。
如果你坚持说,这样做你自己,你将需要fork一个后台线程,使用ContentResolver
和openInputStream()
获得由Uri
支持内容的InputStream
,使用BitmapFactory
和decodeStream()
获得Bitmap
,然后(上主应用程序线程)使用Bitmap
更新ImageView
。
应该这样做吗? Uri imageUri = data.getData(); Picasso.with(this).load(imageUri).into(imageView); – jack
@jack:是的,看起来不错,假设'this'是你的'Activity'。这将处理在后台线程中加载图像并将其放入你的'ImageView'中。毕加索还有许多其他的配置选项(例如缩放控制),以防您需要它们。 – CommonsWare
好吧,应用程序停止崩溃,但没有任何显示在imageView .... imageuri =“内容://媒体/外部/图像/媒体/ 182”......听起来没错吗? – jack