gpt4 book ai didi

android - API 级别 <11 的 Cursor.getType()

转载 作者:IT老高 更新时间:2023-10-28 22:22:23 25 4
gpt4 key购买 nike

我正在查询 CallLog 内容提供程序,需要检测列类型。

在 Honeycomb 和更新版本(API 级别 11+)中,您可以通过调用返回以下类型之一的方法 Cursor.getType(int columnIndex) 来获取列首选数据类型:

  • FIELD_TYPE_NULL (0)
  • FIELD_TYPE_INTEGER (1)
  • FIELD_TYPE_FLOAT (2)
  • FIELD_TYPE_STRING (3)
  • FIELD_TYPE_BLOB (4)

我如何在Honeycomb <11 之前的设备上实现这一点?

我尝试了以下方法:

for ( int i = 0; i < cursor.getColumnCount(); i++ ) {    

int columnType = -1;
try {
cursor.getInt( i );
columnType = Cursor.FIELD_TYPE_INTEGER;

} catch ( Exception ignore ) {

try {
cursor.getString( i );
columnType = Cursor.FIELD_TYPE_STRING;

} catch ( Exception ignore1 ) {

try {
cursor.getFloat( i );
columnType = Cursor.FIELD_TYPE_FLOAT;

} catch ( Exception ignore2 ) {

try {
cursor.getBlob( i );
columnType = Cursor.FIELD_TYPE_BLOB;

} catch ( Exception ignore3 ) {

columnType = Cursor.FIELD_TYPE_NULL;
}
}
}
}

}

但是,不会引发异常。数据始终以您要检查的第一种类型进行转换,在本例中为 getInt()。这意味着,如果列类型为 Integer 但对于所有其他类型为 0,我会得到正确的值。

为什么我不查看文档来检查存储的类型?这些列因设备制造商而异,并非所有列都记录在案,请参阅此问题:How to handle manufacturer-dependent differences in ContentProviders?

有什么想法吗?

最佳答案

扩展 Juan 的答案,这里是我对 API 11 方法 Cursor.getType(int i) 的替换 - 用于由 SQL 查询重新调整的游标

public class DbCompat {

protected static final int FIELD_TYPE_BLOB = 4;
protected static final int FIELD_TYPE_FLOAT = 2;
protected static final int FIELD_TYPE_INTEGER = 1;
protected static final int FIELD_TYPE_NULL = 0;
protected static final int FIELD_TYPE_STRING = 3;

static int getType(Cursor cursor, int i) throws Exception {
SQLiteCursor sqLiteCursor = (SQLiteCursor) cursor;
CursorWindow cursorWindow = sqLiteCursor.getWindow();
int pos = cursor.getPosition();
int type = -1;
if (cursorWindow.isNull(pos, i)) {
type = FIELD_TYPE_NULL;
} else if (cursorWindow.isLong(pos, i)) {
type = FIELD_TYPE_INTEGER;
} else if (cursorWindow.isFloat(pos, i)) {
type = FIELD_TYPE_FLOAT;
} else if (cursorWindow.isString(pos, i)) {
type = FIELD_TYPE_STRING;
} else if (cursorWindow.isBlob(pos, i)) {
type = FIELD_TYPE_BLOB;
}

return type;
}
}

要点:https://gist.github.com/kassim/c340cbfc5243db3a4826

关于android - API 级别 <11 的 Cursor.getType(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11658239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com