2016-01-27 2 views
1

Я до сих пор несколько новичок в rxAndroid/rxJava, поэтому у меня небольшие проблемы, обворачивающие мой разум вокруг этого, и если я все делаю правильно.Запросы SqlBrite на рабочие темы

Я использую SqlBrite для обновления RecyclerView с строками, возвращаемыми из курсора. Когда в таблице выполняется операция db, наблюдаемое ниже отвечает за повторный запрос данных. Я хочу вернуть CursorWrapper (ChecklistCursor), но хочу убедиться, что я запускаю запрос select * в рабочем потоке. Контрольный списокRecyclerAdapter подписывается на наблюдаемый контрольный список и отвечает за управление курсором.

Код, приведенный ниже, является единственным способом, с помощью которого я могу получить query.run() для запуска в рабочем потоке и подписки для возврата в основной поток.

Я думаю, это работает, но я не верю, что это будет стандартный способ сделать это. Может ли кто-нибудь предложить лучший метод, чем использование функции watchOn в два раза?

compositeSubscription.add(db.createQuery(Checklist.TABLE, Checklist.QUERY_ALL) 
    .observeOn(Schedulers.newThread()) 
    .map(query -> new ChecklistCursor(query.run())) 
    .observeOn(AndroidSchedulers.mainThread()) 
    .subscribe(checklistListRecyclerAdapter)); 

ответ

1

Я хотел бы заменить первый observeOn вызов subscribeOn (Schedulers.io()), для того, чтобы выполнить операцию запроса в фоновом потоке. Оператор карты все равно выполнит операцию в фоновом потоке, и после этого вы можете изменить с помощью функции наблюдения, чтобы обновить адаптер. Я думаю, что это единственный способ сделать это.

+0

Похоже, что предлагаемое предложение (заменяя observOn subscribeOn (Schedulers.io)) будет запускать карту в основном потоке. – tylerjroach