2015-08-22 48 views
5

Tôi cố gắng để tải hình ảnh từ con đường camera trong GridView với sự giúp đỡ của Picasso 2.5.2Picasso hình ảnh tải

lưu trữ/mô phỏng/0/DCIM/Camera/IMG_20150822_133220.jpg đây là con đường.

Ngoài ra, tôi đã thử giải pháp đã đưa ra cho vấn đề trong Github repo của picasso. Nhưng nó không giải quyết được vấn đề của tôi.

Tôi đã thử với Chuyển đổi picasso, nhưng hình ảnh không nhận được tải từ đường dẫn máy ảnh.

Tôi cố gắng này

File imageFile = new File(data.path); 
Picasso.with(mContext) 
    .load(imageFile) 
    .placeholder(R.drawable.default_error) 
    .error(R.drawable.default_error) 
    .resize(mItemSize, mItemSize) 
    .centerCrop() 
    .into(image); 
+0

Bạn có thể vui lòng hiển thị mã và nếu có lỗi trong logcat? –

+0

@Miriana Itani: Đã cập nhật câu hỏi. Cũng thử với uri, stringpath, và cả hai với "file: ///" làm tiền tố, nhưng cũng không làm việc. Tôi bị mắc kẹt trên đó. –

+0

Điện thoại bạn đang sử dụng với phần mềm nào? –

Trả lời

0

Bạn phải vượt qua một url vào phương pháp load().

File imageFile = new File(data.path); 

try{ 
     String url = imageFile.toURI().toURL().toString(); 
     Picasso.with(mContext) 
       .load(url) 
       .placeholder(R.drawable.default_error) 
       .error(R.drawable.default_error) 
       .resize(mItemSize, mItemSize) 
       .centerCrop() 
       .into(image); 
    }catch (MalformedURLException exeption){ 
     exeption.printStackTrace(); 
    } 
+0

Xin lỗi, điều này không hoạt động –

0

Không sử dụng đường dẫn mã cứng để truy cập nội dung thẻ sd - chúng không phổ biến trên các thiết bị.

Sử dụng .getExternalStoragePublicDirectory() và thích hợp hai tham số File constructor thay vì:

File f = new File(
     Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), 
     "Camera/IMG_20150822_133220.jpg"); 
Picasso.with(mContext).load(f)./* ..; 

UPD Oh trên thực tế, ngoài việc đó, họ có an open bug trông có liên quan, một người nào đó có nói rằng họ làm việc xung quanh vấn đề bằng cách sử dụng tuyệt đối đường dẫn, vì vậy hãy thử

Picasso.with(context).load(new File(data.path).getAbsolutePath())... 
+0

Nó không được mã hóa cứng. Tôi đã cho bạn con đường mà tôi nhận được trong khi gỡ lỗi. –

+0

Tìm thấy nội dung nào đó, hãy xem nội dung cập nhật trong câu trả lời của tôi –

+0

Barstov. Xin lỗi, với Absolutepath nó vẫn không hoạt động. –

0

Tôi đã gặp sự cố tương tự và đây là cách tôi đã giải quyết vấn đề. Tôi đang cố gắng để có một ảnh chụp màn hình của màn hình điện thoại của tôi và sau đó tôi lưu nó như một tập tin jpg trong filepath này:

filepath: /data/data/com.example.simon.myapp/app_report/report.jpg 

Tuy nhiên, Picasso đã không tải này ở tất cả - nó chỉ đem lại cho tôi một trống màn.

Vì vậy, sau đó khi tôi lấy ảnh chụp màn hình, tôi quyết định để loại bỏ các .jpg từ tên tập tin để các filepath giống này:

filepath: /data/data/com.example.simon.myapp/app_report/report 

tôi sau đó sử dụng đoạn mã sau để truy cập và hiển thị ảnh chụp màn hình của tôi không có các vấn đề khác.

ContextWrapper cw = new ContextWrapper(context); 
    File directory = cw.getDir("report", Context.MODE_PRIVATE); 
    file = new File(directory, "/report"); 
    Log.e("filepath", file.getPath()); 
    Picasso.with(context).load(file).memoryPolicy(MemoryPolicy.NO_CACHE).into(screenshot); 

Tôi biết rằng bạn sẽ cần phải nhận được phần mở rộng tập tin jpg tại một số giai đoạn trong tương lai, vì vậy nếu bạn cần phải nhận được "report.jpg", chỉ cần đổi tên tập tin sử dụng phương pháp này:

android, How to rename a file?

private boolean rename(File from, File to) { 
    return from.getParentFile().exists() && from.exists() && from.renameTo(to); 
} 
Các vấn đề liên quan