Próbuję zapisać obraz przy użyciu interfejsu API Picasso. Aby to zrobić, próbuję użyć Target
, aby zapisać, ale nie mogę wykonać tej pracy.Zapisywanie obrazu z adresu URL przy użyciu Picassa?
Jak mogę to zrobić?
Próbując
//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;
}
Wyjątek
java.io.IOException: open failed: ENOENT (No such file or directory)
Jaki jest dokładnie Twój problem, wywołanie zwrotne nie działa, czy Bitmapa nie jest zapisana, czy cokolwiek innego? –
@VasylGlodan generuje wyjątek 'java.io.IOException: open failed: ENOENT (Brak takiego pliku lub katalogu)' – FernandoPaiva
Hm, nie jestem pewien, ale ścieżka twojego pliku powinna wyglądać tak: '/ storage/emulated/0/http: // blog.concretesolutions.com.br/wp-content/uploads/2015/04/Android1.png', a system próbuje znaleźć katalog o nazwie '/storage/emulated/0/http://blog.concretesolutions. com.br/wp-content/uploads/2015/04/', ale nie ma takiego katalogu. Spróbuj usunąć wszystkie znaki specjalne z nazwy pliku. –