如何将 SubscribeOn 结果转换为正确的类型
How to cast SubscribeOn result to proper type
我对这段代码片段有疑问:
@Override
public Single<List<Order>> getOrders() {
return Single.create(subscriber -> {
List<Order> orders = new ArrayList<>();
database.beginTransaction();
Cursor cursor = database.query(OrdersSqliteTable.TABLE_NAME,
null, null, null, null, null, null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
orders.add(OrdersSqliteTable.cursorToOrder(cursor));
cursor.moveToNext();
}
database.setTransactionSuccessful();
database.endTransaction();
subscriber.onSuccess(orders);
}).subscribeOn(Schedulers.io());
}
如您所见,我想 return 单独订阅 io scheduler。 Return 类型 - Single<List<OrderItem>>
,但运算符 subscribeOn returns Single<Object>
。编译器用 "incompatible type" 对我大喊大叫(我正在为 Android 使用 Jack 编译器)有什么方法可以转换 subscribeOn 的结果吗? ("cast" 运算符不起作用,因为它不支持泛型)
subscribeOn
没有问题,只需将 create
调用修改为
return Single.<List<Order>>create(subscriber -> {
...
例如参见here了解详情。
我对这段代码片段有疑问:
@Override
public Single<List<Order>> getOrders() {
return Single.create(subscriber -> {
List<Order> orders = new ArrayList<>();
database.beginTransaction();
Cursor cursor = database.query(OrdersSqliteTable.TABLE_NAME,
null, null, null, null, null, null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
orders.add(OrdersSqliteTable.cursorToOrder(cursor));
cursor.moveToNext();
}
database.setTransactionSuccessful();
database.endTransaction();
subscriber.onSuccess(orders);
}).subscribeOn(Schedulers.io());
}
如您所见,我想 return 单独订阅 io scheduler。 Return 类型 - Single<List<OrderItem>>
,但运算符 subscribeOn returns Single<Object>
。编译器用 "incompatible type" 对我大喊大叫(我正在为 Android 使用 Jack 编译器)有什么方法可以转换 subscribeOn 的结果吗? ("cast" 运算符不起作用,因为它不支持泛型)
subscribeOn
没有问题,只需将 create
调用修改为
return Single.<List<Order>>create(subscriber -> {
...
例如参见here了解详情。