Попытка заставить LiveData работать с Room:
Иметь объект Entity:
@Entity
public class TimeEntry{
....
ДАО:
@Dao
public interface TimeEntryDAO {
@Query("SELECT * FROM " + TimeEntry.TIME_TABLE_NAME)
LiveData<List<TimeEntry>> getAll();
...
Внутри активности:
protected void onCreate(Bundle savedInstanceState) {
...
AppDatabase db = AppDatabase.getInstance(mContext);
db = AppDatabase.getInstance(getApplicationContext());
tDAO = db.timeEntryDao();
tDAO.getAll().observe(this, new Observer<List<TimeEntry>>() {
@Override
public void onChanged(@Nullable List<TimeEntry> mTimeEntries) {
if (mTimeEntries != null) {
loadSelectedDates(mTimeEntries); //updates a calendarUI
}
}
});
requestImmediateTimeSync(SyncAdapter.GET_USER_TIMES); //Calls syncAdapter
...
Внутри SyncAdapter:
public void onPerformSync(....
...
AppDatabase db = AppDatabase.getInstance(mContext);
TimeEntryDAO tDAO;
tDAO = db.timeEntryDao();
...
tDAO.insertAll(new TimeEntry(...))
...
Я надеялся, что внутри моей активности, поскольку я наблюдаю за tDAO.getAll(), он обновит календарь после завершения синхронизации. Прямо сейчас вам нужно перезагрузить активность, чтобы получить данные, которые были помещены в базу данных после выполнения синхронизации. Я новичок в Room и LiveData. Любые идеи? Надеюсь, я не вынул слишком много кода, пока это из довольно большого приложения.