У меня есть функция, которая запускается каждые 30 секунд, в которой она получает последние данные с сервера и сохраняет их локально.
В настоящее время я удаляю все существующие строки и снова вставляю все данные, но я думаю, что этот способ не эффективен, я должен обновить данные, только если локальныйданные и сервер откладывают данные.
Так как я могу это сделать?
Вот что я делаю:
DatabaseDao:
@Dao
public interface GeneralDatabaseDao {
@Query("DELETE FROM table_tables")
int deleteTables();
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insertRestaurantTablesData(TablesModel... TablesModels);
}
Репозиторий:
public LiveData<List<TablesModel>> getTablesData(int mLocationID) {
mTablesList = new MutableLiveData<>();
LiveData<TablesModel> mTablesData = mTableDataSource.getTablesData();
Observer<TablesModel> mObserver = tableModels -> {
mExecutors.diskIO().execute(() -> {
//Completed: delete old table data if there are conflicts.
if (tableModels != null) {
mDatabaseDao.deleteTables();
mDatabaseDao.insertTablesFromServer(tableModels.getTables());
} else {
Log.e(LOG_TAG, "Nothing: ");
}
});
Log.e("Handlers", "repository getTablesData");
};
if (!mTablesData.hasObservers()) {
mTablesData.observeForever(mObserver);
}
return mDatabaseDao.getTablesData(mLocationID);
}
Я знаю, что мне нужно сравнить все локальные строки с данными, полученными с сервера, а затем обновить только измененные данные, но для этого мне нужно запросить локальные данные и проверить строкустрока в цикле, а затем обновить.Я в порядке, но есть ли другой эффективный способ?