Синхронный запрос Android RoomAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Синхронный запрос Android Room

Сообщение 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);


Подробнее здесь: https://stackoverflow.com/questions/790 ... nous-query
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»