我想下载我上传到Firebase的图像。我得到了URL,并能够将它们直接加载到所需的ImageView中。但是我想将它们下载到内部存储中的所需路径中。
我已经使用了毕加索,但是它对我不起作用,因为在使用(new Target())时出现以下错误,这是我将毕加索与Target一起使用时出现的错误
下面是毕加索的代码
Picasso.get()
.load(downloadUrl)
.into(new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
try {
String root = Environment.getExternalStorageDirectory().toString();
File myDir = new File(root + "/yourDirectory");
if (!myDir.exists()) {
myDir.mkdirs();
}
String name = new Date().toString() + ".jpg";
myDir = new File(myDir, name);
FileOutputStream out = new FileOutputStream(myDir);
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
out.flush();
out.close();
} catch(Exception e){
// some action
}
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
//Some Action;
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
//Some Action;
}
}
);
我已经在文档中搜索了,但是没有用。请尽快通知我。如果有人有正确答案。在此先感谢
答案 0 :(得分:1)
第一:实施Taget
类方法以清除错误
秒:您的代码会抛出此exception java.io.FileNotFoundException
因为Date
对象的默认格式类似于Mon Jan 21 12:10:23 GMT+02:00 2019
并且您无法创建名称包含:冒号
第三次::检查是否在android.permission.WRITE_EXTERNAL_STORAGE
中添加了androidManiefest.xml
权限,并且需要在棉花糖中使用运行时权限
答案 1 :(得分:0)
注意:要消除错误,您必须实现Target类的方法。
对于下载图像,您可以从链接中找到解决方案
https://www.codexpedia.com/android/android-download-and-save-image-through-picasso/
Picasso.with(this).load(anImageUrl).into(picassoImageTarget(getApplicationContext(), "imageDir", "my_image.jpeg"));
方法
private Target picassoImageTarget(Context context, final String imageDir, final String imageName) {
Log.d("picassoImageTarget", " picassoImageTarget");
ContextWrapper cw = new ContextWrapper(context);
final File directory = cw.getDir(imageDir, Context.MODE_PRIVATE); // path to /data/data/yourapp/app_imageDir
return new Target() {
@Override
public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom from) {
new Thread(new Runnable() {
@Override
public void run() {
final File myImageFile = new File(directory, imageName); // Create image file
FileOutputStream fos = null;
try {
fos = new FileOutputStream(myImageFile);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Log.i("image", "image saved to >>>" + myImageFile.getAbsolutePath());
}
}).start();
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
if (placeHolderDrawable != null) {}
}
};
}