Я изучаю RxJava, и для этого я играю с SQLite, создавая вспомогательный класс SQLiteUtils
, чтобы упростить обработку асинхронных запросов ContentResolver. Например это queryInBackground
метод:RxJava с операциями SQlite и ContentProvider
static
public <T> Observable<T> queryInBackground(
final ContentResolver cr,
final Uri uri,
final String[] projection,
final String selection,
final String[] selectionArgs,
final String sortOrder,
final CursorHandler<T> ch) {
return Observable.create(new Observable.OnSubscribe<T>() {
@Override
public void call(Subscriber<? super T> observer) {
if (!observer.isUnsubscribed()) {
Cursor cursor = null;
try {
cursor = cr.query(uri, projection, selection, selectionArgs, sortOrder);
if (cursor != null && cursor.getCount() > 0) {
while (cursor.moveToNext()) {
observer.onNext(ch.handle(cursor));
}
}
observer.onCompleted();
} catch (Exception err) {
observer.onError(err);
} finally {
if (cursor != null) cursor.close();
}
}
}
}).subscribeOn(Schedulers.computation());
}
где CursorHandler
представляет собой интерфейс:
/**
* Implementations of this interface convert Cursor into other objects.
*
* @param <T> the target type the input Cursor will be converted to.
*/
public interface CursorHandler<T> {
T handle(Cursor cu) throws SQLException;
}
Я читал документы о Schedulers, но я не совсем уверен, что если Schedulers.computation()
было правильным выбор.
И если я хотел бы реализовать что-то похожее на базовые операции HttpUrlConnection
, то планировщик должен выбрать? Schedulers.newThread()
или Schedulers.io()
, я бы придерживался Schedulers.io()
... но не уверен.
Заранее спасибо.
Все самое лучшее, Luca
Благодарим вас за полезную ссылку! –
@LucaSepe мое удовольствие. Также вы можете проверить SQLBrite https://github.com/square/sqlbrite – LordRaydenMK