毕加索图像加载

时间:2015-08-22 10:04:53

标签: android picasso

我试图在Picasso 2.5.2

的帮助下从gridview中的摄像机路径加载图像

存储/模拟/ 0 / DCIM /相机/ IMG_20150822_133220.jpg 这是路径。

此外,我在毕加索的Github回购中尝试了解决问题的解决方案。但它并没有解决我的问题。

我尝试使用毕加索的转换,但图像没有从相机路径加载。

我试过这个

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);

3 个答案:

答案 0 :(得分:0)

您必须将网址传递到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();
    }

答案 1 :(得分:0)

请勿使用硬编码路径访问SD卡内容 - 它们并非在设备上通用。

使用.getExternalStoragePublicDirectory()和正确的双参数File构造函数:

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

UPD 实际上,除此之外,他们看起来有an open bug看起来很相关,有人说他们使用绝对路径解决了这个问题,所以试试

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

答案 2 :(得分:0)

我现在遇到了类似的问题,这就是我解决它的方法。我正在尝试截取手机屏幕的截图,然后将其保存为此文件路径中的jpg文件:

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

然而,毕加索根本没有加载它 - 它只是给我一个空白的屏幕。

然后当我拍摄截图时,我决定从文件名中删除.jpg,以便文件路径类似于:

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

然后,我使用以下代码访问并显示我的屏幕截图,没有其他问题。

    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);

我知道您需要在未来的某个阶段获取jpg文件扩展名,因此如果您需要获取“report.jpg”,只需使用此方法重命名该文件:

android, How to rename a file?

private boolean rename(File from, File to) {
    return from.getParentFile().exists() && from.exists() && from.renameTo(to);
}