如何通过Uri将图像从外部存储器设置为imageview?

时间:2016-01-25 12:36:29

标签: android-intent android-imageview

我正在从设备相机捕捉图像并通过Uri将其保存到我的外部存储器中,并且我将该Uri传递给下一个活动以便在那里显示。我能够成功地将Uri传递给下一个活动,但我无法将其设置为imageview。我带头去解决这个问题,参考几乎所有的节奏,但我无法解决这个问题。请帮助我。 这是我的相机活动代码

package kumar.anish.sunset_logistics;


public class underConstruction extends Activity {
ImageView image;
Uri ak;
File photofile;
//   ArrayList arrayList1;
File imageStorageFolder;
static final int CAPTURE_IMAGE_THUMBNAIL_ACTIVITY_REQUEST_CODE = 1888;
public static final int CAPTURE_IMAGE_FULLSIZE_ACTIVITY_REQUEST_CODE = 1777;
String TAG="Log";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_under_construction);
    image=(ImageView)findViewById(R.id.Imc);

    File photostorage = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
    photofile = new File(photostorage, (System.currentTimeMillis()) + ".jpg");


    Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //intent to start camera
    i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photofile));

    startActivityForResult(i, CAPTURE_IMAGE_FULLSIZE_ACTIVITY_REQUEST_CODE);
}
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{

    //Check that request code matches ours:
    if (requestCode == CAPTURE_IMAGE_FULLSIZE_ACTIVITY_REQUEST_CODE)
    {
        saving();

        Intent confirmBMP = new Intent(this,ImagePreview.class);

        Log.e("my dir pass", ak.toString());
        confirmBMP.setData(ak);
        startActivity(confirmBMP);
    }

}
public void saving()
{
    String root = Environment.getExternalStorageDirectory().toString();
    File newDir = new File(root + "/Anish Roger");
    newDir.mkdirs();
    Random gen = new Random();
    int n = 10000;
    n = gen.nextInt(n);
    // String fotoname = "Photo-"+ n +".jpg";
    String fotoname = "Photo.jpg";
    File file = new File (newDir, fotoname);
    if (file.exists ()) file.delete ();
    ak=Uri.fromFile(file);
    Log.e("my dir", ak.toString());

}

}

这是我下一次尝试在imageview中设置捕获图像的活动

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_image_preview);
    imageView=(ImageView)findViewById(R.id.IMcam);
        Intent intent = getIntent();
    Uri uri = getIntent().getData();
    Log.e("Uri in ImagePr",uri.toString());


    imageView.setImageURI(uri);




}

请帮帮我。

1 个答案:

答案 0 :(得分:0)

在“保存”方法中,您似乎没有在文件中写入任何内容(事实上,如果存在,则将其删除)。

下一个活动可能是获取一个URI,该URI指的是一个不存在的文件,因此调用imageView.setImageURI(uri)将无效。

您可能希望将相机应用程序捕获的文件复制到“ak”URI指向“保存”方法中的文件中。

查看FileInputStreamFileOutputStream类,或使用this answer中的代码复制文件。