2016-02-02 3 views
3

Я изучаю 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

ответ

3

Согласно this answer вы должны использовать Schedulers.io(). Соответствующая цитата:

-й() поддерживаются неограниченным нарезание бассейна и является своим родом вещи вы бы использовать для не требующих большого объема вычислений задач, то есть материал, который не ставит большую нагрузки на CPU. Таким образом, взаимодействие yep с файлом , взаимодействие с базами данных или услугами на другом хосте хорошие примеры.

+0

Благодарим вас за полезную ссылку! –

+2

@LucaSepe мое удовольствие. Также вы можете проверить SQLBrite https://github.com/square/sqlbrite – LordRaydenMK

Смежные вопросы