我正在开发的Android应用程序基本上是一个购物应用程序,它有一个Cart选项,用户可以在其中添加项目。
项目有图像,名称,价格等。
我从服务器获取所有这些数据。
当用户点击"添加到购物车"选项然后创建一个sqlite数据库,我存储名称,价格和图像路径。
当点击添加到购物车并且只有图像路径存储在数据库中时,基本上Imgaes存储在内部存储器中。
问题:
要将图像存储在内部存储器中,我使用下面的代码,我将自己给出文件名(在这种情况下,我将文件名称为 profile.jpg )。
SaveToMemory:
private String saveToInternalSorage(Bitmap bitmapImage){
ContextWrapper cw = new ContextWrapper(getApplicationContext());
// path to /data/data/yourapp/app_data/imageDir
directory = cw.getDir("imageDir", Context.MODE_PRIVATE);
// Create imageDir
mypath=new File(directory,"profile.jpg");
FileOutputStream fos = null;
try {
fos = new FileOutputStream(mypath);
// Use the compress method on the BitMap object to write image to the OutputStream
bitmapImage.compress(Bitmap.CompressFormat.PNG, 100, fos);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return directory.getAbsolutePath();
}
LoadFromMemory:
private Bitmap loadImageFromStorage(String path)
{
try {
File f=new File(path, "");
f.canRead();
b = BitmapFactory.decodeStream(new FileInputStream(f));
return b;
}
如果我这样做,最新图像会被上一张图像覆盖。我无法在内存中存储多个图像。
例如如果我在购物车中添加两个商品,我不知道如何存储这两个图像并获得它。
目标
需要在内存中存储任意数量的带有随机文件名的图像
将文件名存储在sqlite数据库中。
将其恢复为在Imageview中显示。
任何帮助都会非常感谢。
答案 0 :(得分:8)
尝试
mypath=new File(directory,System.currentTimeMillis()+"_profile.jpg");
而不是
mypath=new File(directory,"profile.jpg");
System.currentTimeMillis()
将返回自1970年1月1日00:00:00.0 UTC以来的当前时间(以毫秒为单位)。所以每次都不一样
答案 1 :(得分:5)
您可以使用UUID
new File(directory,"profile_" + UUID.randomUUID().toString() + ".jpg");
它将是
profile_e85c5115-eea6-4b0d-98e3-9e09c2d505b3.jpg
答案 2 :(得分:0)
使用new Date().toString()
代替"profile.jpg"