Я использую Room, и хотя я рад, что большинство моих запросов асинхронны, у меня есть один запрос, который мне нужно синхронизировать.
Кажется, я не понимаю / реализовать приостановку (даже если это правильно).
Совет о том, как сделать один запрос синхронным, был бы полезен, так как на самом деле я не хочу использовать sqlite.
Действие: запрос, который должен быть синхронным
Favourite fave = appDb.favouriteDao().findByTitle(formTitleText);
ДАО:
@Dao
public interface FavouriteDao {
@Query("SELECT * FROM favourite")
List getAll();
@Insert
void insertFavourite(Favourite favourite);
@Update
void updateFavourite(Favourite favourite);
@Delete
void delete(Favourite favourite);
@Query("SELECT * FROM favourite WHERE calc_title LIKE :title LIMIT 1")
Favourite findByTitle(String title);
@Query("SELECT EXISTS(SELECT * FROM favourite WHERE calc_title LIKE :title LIMIT 1)")
boolean isRowIsExist(String title);
@Query("UPDATE favourite SET fav_status = :value WHERE calc_title LIKE :title")
void updateFavourite(String value, String title);
}
###UPDATE###
Код включен по запросу. По сути, это запрос Firestore, результаты которого сохраняются в Calculators ArrayList. Все запрошенные переменные dataSection добавляются в ArrayList, за исключением setFormFavourite. Вот почему я подумал, что это должно быть асинхронно (также вся информация о комнате, которую я прочитал, похоже, предполагает, что все запросы являются асинхронными).
Что касается приостановки, я не использую Kotlin и предпочел бы отметить. Просто упомянул об этом, поскольку видел в этом способ обеспечить завершение запроса комнаты. Однако, если мой запрос комнаты синхронизирован, я теряюсь, почему dataSection.setFormFavourite(fave.getFav()); не возвращаемся до финального Calculators.add(dataSection); называется. Он даже не добавлен как «нулевой», просто не добавлен. Log.d из fave.getFav() (размещенный непосредственно после запроса), кажется, возвращается правильно.
Любая помощь приветствуется
private void getCalculators(Source path) {
db.collection("Calculators")
.get(path)
.addOnCompleteListener(new OnCompleteListener() {
public void onComplete(@NonNull Task task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
String formTitleText = (document.getString("title"));
String formTagLine = (document.getString("tagLine"));
String numberOfFields = (document.getString("NumberFields"));
String formInfo = (document.getString("formInfo"));
String formRef = (document.getString("formRef"));
String formula = (document.getString("formula"));
String resultUnits = (document.getString("resultUnits"));
String formSections = (document.getString("sections"));
Calculators dataSection = new Calculators();
dataSection.setFormTitleText(formTitleText);
dataSection.setFormTagLine(formTagLine);
dataSection.setNumberOfFields(numberOfFields);
dataSection.setFormInfo(formInfo);
dataSection.setFormRef(formRef);
dataSection.setFormula(formula);
dataSection.setResultUnits(resultUnits);
dataSection.setFormSections(formSections);
// add favourite status to room db
Favourite fave = appDb.favouriteDao().findByTitle(formTitleText);
dataSection.setFormFavourite(fave.getFav());
calculators.add(dataSection);
Подробнее здесь: https://stackoverflow.com/questions/790 ... nous-query
Синхронный запрос Android Room ⇐ Android
Форум для тех, кто программирует под Android
1726859603
Anonymous
Я использую Room, и хотя я рад, что большинство моих запросов асинхронны, у меня есть один запрос, который мне нужно синхронизировать.
Кажется, я не понимаю / реализовать приостановку (даже если это правильно).
Совет о том, как сделать один запрос синхронным, был бы полезен, так как на самом деле я не хочу использовать sqlite.
Действие: запрос, который должен быть синхронным
Favourite fave = appDb.favouriteDao().findByTitle(formTitleText);
ДАО:
@Dao
public interface FavouriteDao {
@Query("SELECT * FROM favourite")
List getAll();
@Insert
void insertFavourite(Favourite favourite);
@Update
void updateFavourite(Favourite favourite);
@Delete
void delete(Favourite favourite);
@Query("SELECT * FROM favourite WHERE calc_title LIKE :title LIMIT 1")
Favourite findByTitle(String title);
@Query("SELECT EXISTS(SELECT * FROM favourite WHERE calc_title LIKE :title LIMIT 1)")
boolean isRowIsExist(String title);
@Query("UPDATE favourite SET fav_status = :value WHERE calc_title LIKE :title")
void updateFavourite(String value, String title);
}
###UPDATE###
Код включен по запросу. По сути, это запрос Firestore, результаты которого сохраняются в Calculators ArrayList. Все запрошенные переменные dataSection добавляются в ArrayList, за исключением setFormFavourite. Вот почему я подумал, что это должно быть асинхронно (также вся информация о комнате, которую я прочитал, похоже, предполагает, что все запросы являются асинхронными).
Что касается приостановки, я не использую Kotlin и предпочел бы отметить. Просто упомянул об этом, поскольку видел в этом способ обеспечить завершение запроса комнаты. Однако, если мой запрос комнаты синхронизирован, я теряюсь, почему dataSection.setFormFavourite(fave.getFav()); не возвращаемся до финального Calculators.add(dataSection); называется. Он даже не добавлен как «нулевой», просто не добавлен. Log.d из fave.getFav() (размещенный непосредственно после запроса), кажется, возвращается правильно.
Любая помощь приветствуется
private void getCalculators(Source path) {
db.collection("Calculators")
.get(path)
.addOnCompleteListener(new OnCompleteListener() {
public void onComplete(@NonNull Task task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
String formTitleText = (document.getString("title"));
String formTagLine = (document.getString("tagLine"));
String numberOfFields = (document.getString("NumberFields"));
String formInfo = (document.getString("formInfo"));
String formRef = (document.getString("formRef"));
String formula = (document.getString("formula"));
String resultUnits = (document.getString("resultUnits"));
String formSections = (document.getString("sections"));
Calculators dataSection = new Calculators();
dataSection.setFormTitleText(formTitleText);
dataSection.setFormTagLine(formTagLine);
dataSection.setNumberOfFields(numberOfFields);
dataSection.setFormInfo(formInfo);
dataSection.setFormRef(formRef);
dataSection.setFormula(formula);
dataSection.setResultUnits(resultUnits);
dataSection.setFormSections(formSections);
// add favourite status to room db
Favourite fave = appDb.favouriteDao().findByTitle(formTitleText);
dataSection.setFormFavourite(fave.getFav());
calculators.add(dataSection);
Подробнее здесь: [url]https://stackoverflow.com/questions/79004734/android-room-synchronous-query[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия