Android DatabaseUtils cursorRowToContentValues将blob转换为字符串
我刚刚偶然发现Android的Android DatabaseUtils cursorRowToContentValues将blob转换为字符串,android,cursor,blob,android-cursor,Android,Cursor,Blob,Android Cursor,我刚刚偶然发现Android的DatabaseUtils.cursorRowToContentValues方法有一个问题。 在游标中,blob正确地存储为字节数组cursor.getBlob()也返回正确的值。 但是,在使用utils方法对其进行转换后,ContentValues包含一个字符串,调用getAsByteArray返回null,因为没有包含该键的字节数组 我找不到任何关于此的错误报告,但我认为这不是故意的 光标是一个自填矩阵运算器 这就是问题所在 以下是代码: 没有AbstractW
DatabaseUtils.cursorRowToContentValues
方法有一个问题。
在游标中,blob正确地存储为字节数组cursor.getBlob()也返回正确的值。
但是,在使用utils方法对其进行转换后,ContentValues
包含一个字符串,调用getAsByteArray
返回null,因为没有包含该键的字节数组
我找不到任何关于此的错误报告,但我认为这不是故意的
光标是一个自填矩阵运算器
这就是问题所在
以下是代码:
没有AbstractWindowedCursor
总的来说,DatabaseUtils
只是为了方便起见。如果他们为你工作,很好。如果它们对您不起作用,那么您必须使用自己的util方法。您有一些代码来演示这个问题吗?只要数据实际上是blob并且光标是AbstractWindowedCursor
,该方法就支持blob。光标是一个自填充矩阵。我会在周一为它写一个测试。好的,这就解释了。我将在回答中展开它。是的,我刚刚查看了数据库的源代码。我想知道他们为什么这样做。它至少应该写在文档中!同意Android sqlite文档在某些地方不是很好。使用源代码,不要只信任文档。
710 public static void cursorRowToContentValues(Cursor cursor, ContentValues values) {
711 AbstractWindowedCursor awc =
712 (cursor instanceof AbstractWindowedCursor) ? (AbstractWindowedCursor) cursor : null;
713
714 String[] columns = cursor.getColumnNames();
715 int length = columns.length;
716 for (int i = 0; i < length; i++) {
717 if (awc != null && awc.isBlob(i)) {
718 values.put(columns[i], cursor.getBlob(i));
719 } else {
720 values.put(columns[i], cursor.getString(i));
721 }
722 }
723 }
java.lang.Object
↳ android.database.AbstractCursor
↳ android.database.MatrixCursor