安卓Cursor?如何读取对象数据?

5

我知道一个 Cursor 有获取 String, Int 等信息的方法,但是难道没有像

mycursor.GetObject(index)

我希望创建一个动态方法,返回一个对象并进行强制转换。

或者是否可以对任何类型使用mycursor.GetString(index)?例如String、Float、Double、Long、Short、Blob、Int等等。

我可以将其用于FloatInt或任何类型,并进行强制转换吗?

例如:

(Blob) newblob=mycursor.GetString(i_return_BloB);
(Int) newint=mycursor.GetString(i_return_Int);
(Float) newfloat=mycursor.GetString(i_return_Float);
(Double) newdouble=mycursor.GetString(i_return_Double);
(Long) newlong=mycursor.GetString(i_return_long);
(Short) newshort=mycursor.GetString(i_return_short);

这个方法会起作用吗?我能够对任何类型使用 mycursor.GetString() 方法吗?

2个回答

4
您可以通过获取列的类型,然后从switch语句中调用适当的方法(并自己构建要请求的方法)。
使用getString处理不同类型是不安全的,因为文档指定:

结果以及当列值为空或列类型不是字符串类型时此方法是否抛出异常是由实现定义的。


android.database.Cursor没有getType()方法,我原本的想法是使用switch或if语句,但它并没有GetType(columnindex)。 - angel
在API级别>=11上可用...似乎没有适合旧版Android的方法,请参见https://dev59.com/iWgu5IYBdhLWcg3wASaO - dst

2
你可以尝试类似以下的方法:

你希望尝试如下操作:

DataBaseHelper myDbHelper = new DataBaseHelper(this);

ArrayList<String> mArrayList = new ArrayList<String>();

String[] array;

Cursor c = myDbHelper.query(query);

int id = c.getColumnIndex("COLUMN_NAME");

for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
    mArrayList.add(c.getString(id));
}

array = mArrayList.toArray(new String[0]);


System.out.println(array[0]);

c.close();

myDbHelper.close();

您的query()应该类似于以下内容:

public Cursor query(String query){

    String selectAll = null;

    if(query.length() > 1){

    selectAll = "SELECT TABLENAME.COLUMNAME FROM TABLENAME WHERE TABLENAME.COLUMNNAME LIKE" + query + ";";

    return myDataBase.rawQuery(selectAll, null);
}

您需要根据自己的需求更改SQL代码。在这种情况下,我正在检索与查询匹配的列的每个值,但您可以修改SELECT语句。希望能对您有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接