如何从Object类的数组中提取游标和整数值?

时间:2013-04-04 18:39:36

标签: java android sqlite

我有一个返回Object数组的方法(Java中所有类的父类)。数组包含两种类型的数据,您可以看到objArray[0] is a int;objArray[1] is a cursor;

public Object[] search_record(String rollNo) {

    Object[] objArray = new Object[2];

    SQLiteDatabase db = this.getWritableDatabase();

    Cursor cur = db.rawQuery("SELECT * FROM " + TABLE_NAME
            + " where roll_no = ?", new String[] { rollNo });
    int count = cur.getCount();

    objArray[0] = count;
    objArray[1] = cur;

    Log.i("Records count", count + "");

    return objArray;

}

现在我无法将这些值提取回原始值i.e int and cursor。我正在得到这样的阵列。

Object[] objArray = dbHelper.search_record("08cs18");
int x = ((Integer) objArray[1]).intValue();
Cursor cursor = (Cursor) objArray[0];

但应用程序与classCastException

崩溃

从技术上讲,我认为这是可能的。

3 个答案:

答案 0 :(得分:4)

对我来说很简单。看看你的陈述:

  

objArray [0]是一个int;和objArray [1]是一个游标;

然后是代码:

Object[] objArray = dbHelper.search_record("08cs18");
int x = ((Integer) objArray[1]).intValue();
Cursor cursor = (Cursor) objArray[0];

你正在以错误的方式对待它们 - 因为objArray[1]是整数,objArray[0]是光标。只需转换索引。

,最好......创建自己的类来封装“游标和计数”:

public final class CursorAndCount {
    private final int count;
    private final Cursor cursor;

    public CursorAndCount(int count, Cursor cursor) {
        this.count = count;
        this.cursor = cursor;
    }

    public int getCount() {
        return count;
    }

    public int getCursor() {
        return cursor;
    }
}

然后,您可以更改search_record(应该称为searchRecord)以返回CursorAndCount - 并且调用代码将立即更具可读性。

请注意,无论如何你从光标得到了计数,为什么不直接返回光标?当然来电者可以自己使用Cursor.getCount(),不是吗?

答案 1 :(得分:3)

您正在混合索引,光标​​位于1位置,而int位于0位置。试试这个:

int x = ((Integer) objArray[0]).intValue();
Cursor cursor = (Cursor) objArray[1];

你知道,这是完全使用混合数据类型的对象数组的问题是一个坏主意。您最好使用要返回的属性创建一个新类(“传输对象”),并返回该类的实例。

答案 2 :(得分:3)

您正在使用其他方式的索引。 0表示int,1表示Cursor。