我有一个返回对象数组的方法(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而崩溃

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

最佳答案

对我来说看起来很简单。查看您的陈述:

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(),不是吗?

07-26 09:03