Сохраняйте целостность приложения при использовании асинхронных вызовов в android - PullRequest
0 голосов
/ 03 мая 2020

Я стараюсь поддерживать свое приложение в чистоте, используя хорошие принципы дизайна. Я хочу, чтобы представление, слои logi c и базы данных были разделены.

В приложении, над которым я сейчас работаю, у меня есть основное действие, одноэлементный класс, класс logi c и комната для доступа к базе данных. Я хотел бы, чтобы действие сообщило logi c, что нужно извлечь данные из базы данных и затем загрузить их в синглтон. Как только это будет сделано, мне нужно основное действие, чтобы показать данные, загруженные в синглтоне.

Использование комнаты LiveData. Как я могу использовать LiveData и затем каким-то образом вернуть результат в слой logi c, затем загрузить его в синглтон и позволить основному действию теперь, когда оно готово?

В целом, как я могу сказать вызывающей стороне из вызываемого, что данные готовы, когда они асинхронные? Например, если основное действие вызывает класс logi c в другом потоке для загрузки данных, как класс logi c может сообщить основному действию, что оно выполнено?

1 Ответ

0 голосов
/ 03 мая 2020

Вы можете использовать обработчик для обновления основного действия в потоке пользовательского интерфейса:

LogicClass.functionThatAccessesRoom() {

  //get data from Room
  //...

  Handler handler = new Handler(Looper.getMainLooper()) {
    @Override
    public void handleMessage(@NonNull Message msg) {
      //update the UI/views here
    }
  };
  handler.obtainMessage().sendToTarget();

}
...