2012-11-25 14 views
6

tôi sử dụng mục đích này để cho phép người dùng chọn một bức ảnh:'getContentResolver() openInputStream (uri) `ném FileNotFoundException

Intent intent = new Intent(Intent.ACTION_PICK, 
          MediaStore.Images.Media.INTERNAL_CONTENT_URI); 
startActivityForResult(intent, INTENT_SELECT_PHOTO); 

Và trong onActivityResult:

Uri uri = data.getData(); 
InputStream inputStream = getContentResolver().openInputStream(uri); 

Nhưng nó ném FileNotFoundException trên một số thiết bị Android.

Giá trị của uri:

content://media/external/images/media/26467 

Trường hợp ngoại lệ ném:

java.io.FileNotFoundException: No such file or directory 

Và nó rất lạ rằng nó sẽ không ném ngoại lệ này trên một số thiết bị Android khác. Điều gì sẽ gây ra lỗi này và cách sửa lỗi?

Trả lời

2
MediaStore.Images.Media.INTERNAL_CONTENT_URI 

cho hình ảnh trên thiết bị cục bộ hoặc

MediaStore.Images.Media.EXTERNAL_CONTENT_URI 

cho hình ảnh trên thẻ SD.

Bạn có chắc chắn đang xử lý chính xác không? Việc điều trị nội bộ/bên ngoài thay đổi theo thiết bị, có lẽ đó là lý do tại sao nó hoạt động trên một số nhưng không phải trên những người khác.

+3

Tôi chỉ thấy rằng vì các hình ảnh thực tế bị xóa, nhưng chúng có bộ nhớ cache trong ứng dụng trình xem ảnh. – Freewind

+0

Điều cần biết, tìm kiếm sự cố tôi gặp phải vấn đề liên quan đến http://code.google.com/p/android/issues/detail?id=12508 – Shakti

+0

Right Freewind, tôi đã duyệt mã/lỗi chính xác này thư mục tải xuống của tôi cho một tệp .txt và có nơi để tải xuống và cả hai đều có cùng kích thước, một tệp đã hoạt động không có. Cảm ơn! – tom

1

Tôi gặp vấn đề tương tự nhưng tôi đã giải quyết vấn đề bằng cách sử dụng phương pháp setImageURI của ImageView.

Bạn không cần phải sử dụng đoạn mã sau:

InputStream inputStream = getContentResolver().openInputStream(uri); 

Đơn giản chỉ cần sử dụng chức năng sau:

imageViewCustomer.setImageURI(data.getData()); 
-1

Sử dụng Context.getContentResolver() openInputStream (Uri);.