【发布时间】:2015-12-24 07:11:48
【问题描述】:
我正在尝试使用 API Picasso 保存图像。为此,我正在尝试使用 Target 进行保存,但我无法完成这项工作。
我该怎么做?
尝试
//save image
public static void imageDownload(Context ctx){
Picasso.with(ctx)
.load("http://blog.concretesolutions.com.br/wp-content/uploads/2015/04/Android1.png")
.into(getTarget("http://blog.concretesolutions.com.br/wp-content/uploads/2015/04/Android1.png"));
}
//target to save
private static Target getTarget(final String url){
Target target = new Target(){
@Override
public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom from) {
new Thread(new Runnable() {
@Override
public void run() {
//Log.i("PRODUTOS_FOLDER", CreateAppFolder.getProdutosFolder());
File file = new File(Environment.getExternalStorageDirectory() + url);
try {
file.createNewFile();
FileOutputStream ostream = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, ostream);
ostream.flush();
ostream.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
};
return target;
}
例外
java.io.IOException: open failed: ENOENT (No such file or directory)
【问题讨论】:
-
你的问题到底是什么,回调不起作用,或者你的位图没有保存,或者其他什么?
-
@VasylGlodan 确实抛出异常
java.io.IOException: open failed: ENOENT (No such file or directory) -
嗯,我不确定,但你的文件路径应该是这样的
/storage/emulated/0/http://blog.concretesolutions.com.br/wp-content/uploads/2015/04/Android1.png,并且系统试图找到名为/storage/emulated/0/http://blog.concretesolutions.com.br/wp-content/uploads/2015/04/的目录,但是没有这样的目录。尝试从文件名中删除所有特殊字符。 -
@FernandoPaiva 有同样的问题。尝试将您的文件名设置为其他名称,问题是当您想使用您的 url 创建文件名时。尝试使用当前时间或其他东西。