Wpis z mikrobloga

Używał ktoś z was biblioteki Android Room (ORM od Google'a)? Nie bardzo wiem jak zaprojektować moją aplikację; Room rzuca błędem jeżeli próbuję pobrać jakieś dane z bazy danych w głównym wątku. Brzmi to konkretnie tak:

Cannot access database on the main thread since it may potentially lock the UI for a long period of time


I o ile ma to faktycznie sens, to nie bardzo wiem jak to zrobić inaczej, żeby nie pobierać tych danych w tym głównym wątku. Poprzednio programowałem w C# i tam wystarczyło dopisać "await" przed którąś z metod i sprawa załatwiona. Tymczasem szukając rozwiązania dla javy znalazłem takiego potworka. Gość żeby wywołać zwykłe zapytanie SELECT pisze jakąś kilkunastolinijkową klasę AsyncTask, która może i faktycznie działa, ale wymaga bardzo dużo kodu (a to tylko jedno zapytanie do bazy!)

Czy ja naprawdę muszę pisać dla każdego zapytania klasę AsyncTask obsługującą to zapytanie, czy może istnieją jakieś lepsze sposoby na to?

#programowanie #java #android
  • 10
  • Odpowiedz
@piotrek-5: Jeżeli nie wiesz jak zrobić coś na wątku pobocznym żeby nie blokować UI (czym jest AsyncTask) lub nie wiesz czego nie powinno się robić takich rzeczy to tym bardziej nie powinieneś brać się za Room. Najpierw ogarnij podstawy.
  • Odpowiedz
@piotrek-5: > Jeżeli nie wiesz jak zrobić coś na wątku pobocznym żeby nie blokować UI (czym jest AsyncTask) lub nie wiesz czego nie powinno się robić takich rzeczy

Mówię tu o blokowaniu wątku UI. AsyncTask jest stary i wolny, nikt tego już praktycznie nie używa.
  • Odpowiedz
@piotrek-5: coś w ten deseń, ale gdyby taki był cały system, taki windows phone, tyle że android. Nie wiem też jak wygląda obsługa xamarina od wewnątrz, czy on jest obsługiwany względnie 'natywnie' czy przechodzi przez warstwy javy.
  • Odpowiedz