我有一个返回对象数组的方法(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()
,不是吗?