【问题标题】:Android: Thumbnail stored in DB is returned nullAndroid:存储在数据库中的缩略图返回 null
【发布时间】:2015-03-27 16:11:24
【问题描述】:

我有一个 Db,我在其中以 ByteArray 形式存储了视频的路径及其缩略图。但是当我尝试从数据库中检索缩略图时,我总是得到空值。这是我用来检索拇指和路径的代码:

        db=openOrCreateDatabase("VideoPaths", Context.MODE_PRIVATE, null);
        db.execSQL("CREATE TABLE IF NOT EXISTS paths(path VARCHAR,thumbnail BLOB);");
        Cursor c = db.rawQuery("SELECT path,thumbnail FROM paths",null);
        int index = c.getColumnIndex("path");
        int index2 = c.getColumnIndex("thumbnail");

        c.moveToFirst();

            if (c != null) {
                // Loop through all Results
                do {

                    String VideoPath = c.getString(index);
                    byte[] bytes = c.getBlob(index2);
                    Bitmap thumb = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);


                    pathList.add(VideoPath);
                    listRow.add(new VideoRow(VideoPath,thumb, "User", "Testing"));

                } while (c.moveToNext());
            }

您对如何解决此问题有任何想法吗?

P.S 视频路径检索工作正常。

编辑:这是填充表格的代码

Bitmap thumb = ThumbnailUtils.createVideoThumbnail(filePath,
                            MediaStore.Images.Thumbnails.MINI_KIND);
                    ByteArrayOutputStream stream = new ByteArrayOutputStream();
                    thumb.compress(Bitmap.CompressFormat.JPEG, 100, stream);
                    byte[] thumbnailBitmapBytes = stream.toByteArray();

                    db=openOrCreateDatabase("VideoPaths", Context.MODE_PRIVATE, null);
                    db.execSQL("INSERT INTO paths (path,thumbnail) values('" + serverPath + "','"+thumbnailBitmapBytes+"')");

【问题讨论】:

  • 你能分享你用来填充表格的代码吗?

标签: android sqlite null


【解决方案1】:

首先,我不会通过连接字符串来构造您的INSERT 查询。看看database.compileStatement(...)here。尝试这样做:

SQLiteStatement stmt = db.compileStatement("INSERT INTO paths (path, thumbnail) values (?, ?)");
stmt.bindString(1, serverPath);
stmt.bindBlob(2, thumbnailBitmapBytes);
long newRowId = stmt.executeInsert();

然后,当需要获取数据时,您可以使用已共享的代码。

【讨论】:

  • long newRowId 还有什么用?我不能只放 stmt.executeInsert(); ?
  • 没关系,一切正常!非常感谢您的时间! :D
  • long newRowId 值允许您对新行的 SQLite rowid 值执行某些操作。如果不需要它,可以忽略它:)
猜你喜欢
  • 1970-01-01
  • 2021-05-19
  • 1970-01-01
  • 2015-01-25
  • 2017-05-22
  • 1970-01-01
  • 1970-01-01
  • 2018-10-02
  • 2013-06-08
相关资源
最近更新 更多