我查看了很多帖子,无法弄清楚为什么我无法让这个工作。我想要做的就是让用户点击一个打开图库应用程序的按钮。然后用户选择一张自动关闭图库的图片并返回到我的应用程序,在那里它会自动将图像设置为ImageView。
到目前为止,我一直在努力,直到它回到我的应用程序。它似乎一切都很好,但图像永远不会出现在ImageView中。
以下是ImageView的XML代码:
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="14dp"
android:layout_gravity="center_horizontal" />
在我的活动开始时,我将ImageView设置为:
ImageView targetImage;
这是我的其余代码来获取图像并将其设置为我的ImageView。有一个按钮可以启动“setGunImage”。
public void setGunImage(View view) {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"), SELECT_PICTURE);
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (requestCode == SELECT_PICTURE) {
targetImage = (ImageView)findViewById(R.id.imageView1);
Uri selectedImageUri = data.getData();
targetImage.setImageURI(selectedImageUri);
}
}
}
我已经在启用了SD卡的模拟器上测试了它,并且在真实设备上加载了图像。两者都有相同的行为。它通过画廊步骤很好,但当它返回到我的应用程序时,ImageView中没有加载图像。
我尝试将数据更改为位图并进行设置,但它从未显示过。我知道这可能是一件非常简单的事情,我只是没有看到所以希望一副新鲜的眼睛可以指向正确的方向。感谢。
答案 0 :(得分:2)
我认为Imran解决方案应该可以正常工作..............你也可以尝试这种方式
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
InputStream stream = null;
if( resultCode==RESULT_OK)
{
if(requestCode==SELECT_PICTURE)
{
try {
// We need to recyle unused bitmaps
if (bitmap != null) {
bitmap.recycle();
}
stream = getContentResolver().openInputStream(data.getData());
bitmap = BitmapFactory.decodeStream(stream);
targetImage = (ImageView)findViewById(R.id.imageView1);
targetImage.setImageBitmap(bitmap);
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
if (stream != null)
try {
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
super.onActivityResult(requestCode, resultCode, data);
}
}
来自link
答案 1 :(得分:1)
您正在setImageURI中传递URI,因此请先使用MediaStore.Images.Media.DATA
获取图像路径,然后在setImageURI中传递图像路径。
试试这个:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if( resultCode==RESULT_OK)
{
if(requestCode==SELECT_PICTURE)
{
targetImage = (ImageView)findViewById(R.id.imageView1);
Uri selectedImageUri = data.getData();
String selectedImagePath=getPath(selectedImageUri);
targetImage.setImageURI(selectedImageUri);
}
}
}
private String getPath(Uri uri)
{
String[] projection={MediaStore.Images.Media.DATA};
Cursor cursor=managedQuery(uri,projection,null,null,null);
int column_index=cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}