2014-10-07 41 views
0

我正在努力让我的SQLite数据库的选择方法对我正在构建的API具有“完全”动态性。此时的最后一个问题是,我无法确定查询返回的项目的类型。 我已经尝试了几个建议在其他主题中的东西,但他们都没有为我工作。Android API <10替换为getType方法

用它现在的样子,它说:一切都是一个字符串。我知道这适用于int和Strings,但我不确定其他格式和偏差,它不是它应该的方式。 此代码仅适用于一个记录,但这不是问题。

public HashMap<String, String> select(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy) { 
    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor cursor = db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy); 
    columns = cursor.getColumnNames(); //Used when columns[] are null - SELECT * FROM ... 
    HashMap<String, String> resultTable = new HashMap<String, String>(); 
    if (cursor.getCount() > 0) { 
     cursor.moveToFirst(); 

     for (int i = 0; i < cursor.getColumnCount(); i++) { 
      resultTable.put(columns[i], cursor.getString(i)); 
     } 
    } 

    cursor.close(); 
    db.close(); 
    return resultTable; 
} 

我在Android的API版本10个工作日,所以的getType不可

回答

0

首先的检查类型的列数据的数据..的​​帮助下..

cursor.getType(columnIndex) 

检查返回的值与...

cursor.FIELD_TYPE_FLOAT // or cursor.FIELD_XXXXXXX 

然后使用的getXXXX()方法分别..

+1

因为我与API级别10个工作如上面提到的,我不能用这种方法。 – 2014-10-07 12:52:38

0

尝试这种

sstatic INT的getType(光标的光标,INT I)抛出异常 { SQLiteCursor sqLiteCursor =(SQLiteCursor)光标; CursorWindow cursorWindow = sqLiteCursor.getWindow(); int pos = cursor.getPosition(); int type = -1; 如果(cursorWindow.isNull(正,i))的 { 类型= FIELD_TYPE_NULL; }否则如果(cursorWindow.isLong(正,i))的 { 类型= FIELD_TYPE_INTEGER; } 否则如果(cursorWindow.isFloat(正,i))的 { 类型= FIELD_TYPE_FLOAT; } 否则如果(cursorWindow.isString(正,i))的 { 类型= FIELD_TYPE_STRING; } 否则如果(cursorWindow.isBlob(正,i))的 { 类型= FIELD_TYPE_BLOB; } 返回类型; }

+0

转换失败,出现java.lang.ClassCastException:net.sqlcipher.CrossProcessCursorWrapper' – Michael 2017-09-19 21:51:48