Android Ormlite 获取 SelectorIterator<T, ID> 而不是 CloseableIterator<T>

Android Ormlite getting SelectorIterator<T, ID> instead of CloseableIterator<T>

我正在试用 android Ormlite 但收到此错误:

com.j256.ormlite.stmt.SelectIterator cannot be cast to
       com.j256.ormlite.dao.CloseableIterable

这是导致错误的代码;而不是 CloseableIterator<Employee> 它返回 SelectorIterator<Employee>:

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;
}
com.j256.ormlite.stmt.SelectIterator cannot be cast to
   com.j256.ormlite.dao.CloseableIterable

我不是 100% 确定为什么会发生这种情况,除非 Employee 类型是不同的 class。我会通过查看导入语句来确保您的代码引用相同的 class。

这不应该是转换问题,因为 SelectIterator<T, ID> 扩展了 CloseableIterable<T>Where.iterator() returns a CloseableIterator which happens to be a SelectIterator. See the SelectIterator javadocs.

我不确定这是否是问题所在,但您 需要将 CloseableIterator<T> 转换为 SelectIterator<T, ID> 因为没有办法让泛型推断 ID 类型。所以如果你有一个 CloseableIterator<Employee> 并且 Employee 的 id 类型是 int 那么您需要将其大小写为 SelectIterator<Employee, Integer>.