我有一个方法,它返回一个Objects数组(Java中所有类的父类).数组包含两种类型的数据,你可以看到objArray [0]是一个int;和objArray [1]是一个游标;
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;
}
现在我无法将这些值提取回原始值,即int和cursor.我得到这样的阵列.
Object[] objArray = dbHelper.search_record("08cs18");
int x = ((Integer) objArray[1]).intValue();
Cursor cursor = (Cursor) objArray[0];
但应用程序崩溃与classCastException
从技术上讲,这是可能的,我想.
解决方法:
看起来很简单.看看你的陈述:
objArray[0] is a int; and objArray[1] is a cursor;
然后是代码:
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(),不是吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。