Tôi đang cố gắng lấy đối tượng FileInputStream
trên hình ảnh mà người dùng chọn từ thư viện ảnh. Đây là android URI
trả về bởi android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI
Android- làm thế nào tôi có thể chuyển đối tượng android.net.Uri thành đối tượng java.net.URI?
nội dung: // media/bên ngoài/images/media/3
Khi tôi cố gắng xây dựng một java URI đối tượng từ đối tượng này, tôi nhận được một IllegalArgumentException với mô tả ngoại lệ chương trình tập tin Dự kiến trong URI: Nội dung: // media/bên ngoài/images/media/3 trong khi android URI cho thấy các chương trình như nội dung
Không bao giờ tìm thấy một giải pháp cho câu hỏi ban đầu. Nhưng nếu bạn muốn dòng byte của một hình ảnh trong thư viện hình ảnh, đoạn mã này sẽ làm điều đó.
Bitmap bitmap = Media.getBitmap(getContentResolver(), imageUri);
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 40, bytes);
ByteArrayInputStream fileInputStream = new ByteArrayInputStream(bytes.toByteArray());
Cảm ơn. Đã thử điều đó. Nó đưa ra một ngoại lệ (java.net.URI nên có một lược đồ hợp lệ) – lostInTransit
điều này là sai và sẽ thất bại nếu URI có các ký tự cần mã hóa (như khoảng trắng). android.net.Uri.toString() giải mã các ký tự được mã hóa và java.net.URI sẽ ném một ngoại lệ nếu bạn cố gắng xây dựng nó trên một chuỗi không được mã hóa. giải pháp đúng 'huri = new java.net.URI (URLEncoder.encode (auri.toString()," UTF-8 "));' –
@Jeffrey: Uri.toString() trả về các ký tự được mã hóa trên Android 4.1.2 của tôi thiết bị –