我浏览了成千上万的帖子,无法弄清楚为什么我不能使它正常工作.我要做的就是让用户单击一个打开图库应用程序的按钮.然后,用户选择一张图片,该图片会自动关闭图库,然后返回我的应用程序,在该应用程序中它将图像自动设置为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中没有图像加载.
我尝试将数据更改为位图并进行设置,但均未显示.我知道这可能是非常简单的事情,以至于我只是看不到所以希望一双新鲜的眼睛可以将我指向正确的方向.谢谢.
解决方法:
我认为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