Java Android或MLite获取SelectorIterator<;T、 ID>;而不是CloseableIterator<;T>;
我正在试用android Ormlite,但出现以下错误:Java Android或MLite获取SelectorIterator<;T、 ID>;而不是CloseableIterator<;T>;,java,android,ormlite,Java,Android,Ormlite,我正在试用android Ormlite,但出现以下错误: com.j256.ormlite.stmt.SelectIterator cannot be cast to com.j256.ormlite.dao.CloseableIterable 这是导致错误的代码;它返回的不是SelectorIterator,而是SelectorIterator: public CloseableIterator<Employee> getEmployeesToSync(Conte
com.j256.ormlite.stmt.SelectIterator cannot be cast to
com.j256.ormlite.dao.CloseableIterable
这是导致错误的代码;它返回的不是SelectorIterator
,而是SelectorIterator
:
public CloseableIterator<Employee> getEmployeesToSync(Context context){
DatabaseHelper databaseHelper = new DatabaseHelper(context);
CloseableIterator<Employee> iterator = null;
try {
iterator = databaseHelper.getEmployeesDao().queryBuilder().
where().
eq(Employee.IS_SYNCED, false).
iterator();
} catch (Exception ex) {
Log.e(LOG_TAG, ex.getMessage());
}
return iterator;
}
public closeable迭代器getEmployeesToSync(上下文){
DatabaseHelper DatabaseHelper=新的DatabaseHelper(上下文);
CloseableIterator迭代器=null;
试一试{
迭代器=databaseHelper.getEmployeesDao().queryBuilder()。
where()。
eq(Employee.IS_synched,false)。
迭代器();
}捕获(例外情况除外){
Log.e(Log_标记,例如getMessage());
}
返回迭代器;
}
除非Employee
类型是另一个类,否则我无法100%确定为什么会发生这种情况。通过查看import语句,我可以确保您的代码引用的是同一个类
这不应该是一个强制转换问题,因为SelectIterator
扩展了closeableiteratable
,并返回一个CloseableIterator
,它恰好是一个SelectIterator
。看
我不确定这是否是问题所在,但您需要将CloseableIterator
转换为SelectIterator
,因为泛型无法推断ID类型。所以如果你有
CloseableIterator
并且Employee
的id类型是int
那么您需要将其设置为SelectIterator
将结果转换为SelectorIterator
解决了问题;这很奇怪。我的方法返回CloseableIterator
,但我必须将其转换为SelectorIterator。SelectIterator Employees=(SelectIterator)EmployeesProvider.getInstance().getEmployeesToSync(getContext())代码>哪一行给出了该错误?这是运行时错误吗?你能发布完整的异常吗?这是一个运行时错误,我已经发布了错误(没有相关的stacktrace)。顺便说一句,我刚刚检查了getEmployeesToSync
方法的返回类型,它的类型是:SelectorIterator而不是CloseableIterator
谢谢,我在某个地方放了一个代码来帮助您重现这个问题。
com.j256.ormlite.stmt.SelectIterator cannot be cast to
com.j256.ormlite.dao.CloseableIterable