Android 在数据库中高效地存储对SD上图像的引用
我对Android编程还很陌生,但我遇到了一个问题——我正在创建一个应用程序,它可以存储“有趣”的图像,让用户可以查看所有这些图像,并对它们进行评分(至少我想这样做)。我试图创建一个非常简单的数据库,将图像存储为blob,但论坛上有人告诉我这是一个坏主意-因此我决定将图像存储在SD-like上(尽管此代码主要来自堆栈):Android 在数据库中高效地存储对SD上图像的引用,android,database,image,sqlite,blob,Android,Database,Image,Sqlite,Blob,我对Android编程还很陌生,但我遇到了一个问题——我正在创建一个应用程序,它可以存储“有趣”的图像,让用户可以查看所有这些图像,并对它们进行评分(至少我想这样做)。我试图创建一个非常简单的数据库,将图像存储为blob,但论坛上有人告诉我这是一个坏主意-因此我决定将图像存储在SD-like上(尽管此代码主要来自堆栈): 完成后,我现在不知道如何存储这个“引用”以及如何实现“从数据库中获取数据”-我正在考虑将(与特定照片相关的其他数据)存储在包含图像路径的数据库字符串中,然后在从数据库读取数据时
完成后,我现在不知道如何存储这个“引用”以及如何实现“从数据库中获取数据”-我正在考虑将(与特定照片相关的其他数据)存储在包含图像路径的数据库字符串中,然后在从数据库读取数据时,也读取图像-但如何有效地做到这一点?(我知道从数据库获取数据必须作为一个线程来完成(AsyncTask?)?我认为最好的方法是将图像的路径存储在BDD或相对路径中,然后访问它我认为最好的方法是将图像的路径存储在BDD或相对路径中,然后访问它将图像路径/文件名存储在本地数据库中,同时将图像保存在文件系统(SD卡)中,然后,当您想要恢复该图像时,只需使用存储在数据库中的imagePath/fileName从文件系统中获取该图像
我希望您知道如何创建文件并将其存储在SD卡中。将图像路径/文件名存储在本地数据库中,同时将图像保存在文件系统(SD卡)中,然后,当您想要恢复该图像时,只需使用存储在数据库中的图像路径/文件名从文件系统中获取该图像
我希望您知道如何创建文件并将其存储在SD卡中。谢谢是非常不必要的
(我知道从DB获取数据必须作为一个线程(异步任务?)
不。一点也不。谢谢是非常不必要的不同意@Kling Klang。他们在给予帮助后非常受欢迎。事实上,如果没有“谢谢”,那就令人失望了。我们都是来帮忙的。但唯一的感谢方式是接受答案和/或喜欢它。或者像一个评论。没有必要明确地说“谢谢”。喜欢吗?这不是facebook。谢谢是非常不必要的(我知道从DB获取数据必须作为线程(异步任务?)
不。一点也不。谢谢是非常不必要的不同意@Kling Klang。他们在给予帮助后非常受欢迎。事实上,如果没有“谢谢”,那就令人失望了。我们都是来帮忙的。但唯一的感谢方式是接受答案和/或喜欢它。或者像一个评论。没有必要明确地说“谢谢”。喜欢吗?这不是facebook。我已经修改了答案,对不起,我只是想帮你。好的,没问题。有人知道为什么这段代码会存储图像,使它们有时出现在普通的图库中吗?我发现android会扫描sd的图像,但我认为在这种情况下它不会这样做?也许有人知道如何提供android?我已经修改了答案,对不起,我只想帮你。好的,没问题。有人知道为什么这段代码会存储图像,使它们有时出现在普通的图库中吗?我发现android会扫描sd的图像,但我认为在这种情况下它不会这样做?也许有人知道如何提供安卓系统?
private void savePicToSD(){
Toast.makeText(getActivity(),"Saving...",Toast.LENGTH_SHORT).show();
//getting BitMap from ImageView
Bitmap imageToSave=((BitmapDrawable)preview.getDrawable()).getBitmap();
// getting env var representing path
String root= Environment.getExternalStorageDirectory().toString();
Toast.makeText(getActivity(),root,Toast.LENGTH_LONG).show();
File dir=new File(root+DIR_NAME_);
dir.mkdirs();
String fileNam="Image-"+FILE_COUNTER_+".jpg";
FILE_COUNTER_=FILE_COUNTER_.add(BigInteger.valueOf(1));
File fileSav=new File(dir,fileNam);
//I don't use try-with-resources because of API lvl
FileOutputStream out=null;
try{
out=new FileOutputStream(fileSav);
//saving compressed file ot the dir
imageToSave.compress(Bitmap.CompressFormat.JPEG,90,out);
out.flush();
out.close();
}catch(Exception ex) {
ex.printStackTrace();
Toast.makeText(getActivity(), "Error during saving.", Toast.LENGTH_SHORT).show();
}
Toast.makeText(getActivity(),"Image saved.",Toast.LENGTH_LONG).show();
}