【问题标题】:Save an image in sqlite Android?在 sqlite Android 中保存图像?
【发布时间】:2014-03-27 23:02:45
【问题描述】:

我有这门课,我在 sqlite 中创建表格,一切都很好,在我的项目中,你可以插入、删除和更新学生和老师的(信息),但现在我想保存一个图像,它意味着除了保存学生或老师的信息之外,我还想保存图像,请有人帮助我吗?你不知道该怎么做。

打包我的类;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class sqliteClass extends SQLiteOpenHelper{

String sqlAlumno = "CREATE TABLE Alumno(id integer primary key,nombre varchar(30),apellidos varchar(25),especialidad varchar(25),email varchar(25))";

String sqlProfe = "CREATE TABLE Profe(id integer primary key,nombre varchar(30),apellidos varchar(25),especialidad varchar(25),email varchar(25))";

    public sqliteClass(Context context, String name, CursorFactory factory,
            int version) {
        super(context, name, factory, version);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(sqlAlumno);
        db.execSQL(sqlProfe);

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {


    }

}

【问题讨论】:

    标签: android image sqlite


    【解决方案1】:

    一般来说:

    在您的创建表查询中添加类型为 blob 的列,例如 image blob

    插入图片

    ContentValues cv = new ContentValues();
    ByteArrayOutputStream out = new ByteArrayOutputStream(); 
    yourBitmap.getBitmap().compress(Bitmap.CompressFormat.PNG, 100, out);
    cv.put(KEY_IMG, out.toByteArray());
    

    恢复图像
    使用Cursor#getBlob() 方法获取图像并将其存储在byte[] 数组中

    byte[] blob = cursor.getBlob(cur.getColumnIndex("image"));
    

    将字节[]转换为位图:

    Bitmap bmp = BitmapFactory.decodeByteArray(blob, 0, blob.length);
    

    但是我认为在数据库中存储图像的大级别没有价值,因为 sqlite 的空间有限,因此存储图像路径很有价值。

    【讨论】:

      【解决方案2】:

      有几种方法可以将图像存储到 android sqlite 数据库。

      stackoverflow.com/questions/10977584

      stackoverflow.com/questions/9357668

      stackoverflow.com/questions/9273008

      希望这些帮助!

      【讨论】:

        【解决方案3】:

        在数据库中保存像图像一样的二进制数据通常被认为是不好的形式。在大多数情况下,由于某些技术原因,它实际上最终会损害数据库的性能。相反,将要缓存的图像保存到 SD 卡中,并将这些图像的文件路径存储在数据库中。

        始终养成将图像路径保存到数据库的习惯。对于列表视图,请确保只使用这些图像的缩略图。这将帮助您在列表中快速加载这些图像。

        long selectedImageUri = ContentUris.parseId(Uri.parse(anniEntry.getUri())); Bitmap bm = MediaStore.Images.Thumbnails.getThumbnail( mContext.getContentResolver(), selectedImageUri,MediaStore.Images.Thumbnails.MICRO_KIND, null );

        这里anniEntry.getUri()是图片的uri。现在,把它放在第二个代码中。U可以根据需要得到微型或迷你缩略图

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-11-29
          • 1970-01-01
          • 1970-01-01
          • 2019-04-02
          • 2012-12-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多