Android 在数据库中高效地存储对SD上图像的引用

Android 在数据库中高效地存储对SD上图像的引用,android,database,image,sqlite,blob,Android,Database,Image,Sqlite,Blob,我对Android编程还很陌生,但我遇到了一个问题——我正在创建一个应用程序,它可以存储“有趣”的图像,让用户可以查看所有这些图像,并对它们进行评分(至少我想这样做)。我试图创建一个非常简单的数据库,将图像存储为blob,但论坛上有人告诉我这是一个坏主意-因此我决定将图像存储在SD-like上(尽管此代码主要来自堆栈): 完成后,我现在不知道如何存储这个“引用”以及如何实现“从数据库中获取数据”-我正在考虑将(与特定照片相关的其他数据)存储在包含图像路径的数据库字符串中,然后在从数据库读取数据时

我对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();

}