Комната Обновляйте данные только если они изменились с сервера - PullRequest
0 голосов
/ 11 октября 2018

У меня есть функция, которая запускается каждые 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);
}

Я знаю, что мне нужно сравнить все локальные строки с данными, полученными с сервера, а затем обновить только измененные данные, но для этого мне нужно запросить локальные данные и проверить строкустрока в цикле, а затем обновить.Я в порядке, но есть ли другой эффективный способ?

1 Ответ

0 голосов
/ 11 октября 2018

Нет, альтернативы нет.Более того, если вы удалите и вставите снова, вы будете активировать обновление интерфейса каждый раз.Поскольку вы использовали оперативные данные для обновления пользовательского интерфейса только тогда, когда это необходимо, вам необходимо обновлять базу данных только тогда, когда это строго необходимо.

При написанном вами коде каждый раз при проверке веб-службы пользовательский интерфейс будет обновляться.,Лучше каждый раз проверять, есть ли строки для изменения, и изменять их.

...