Поддержание актуальных данных области с живыми данными - PullRequest
0 голосов
/ 25 мая 2018

Действительно надеясь, что кто-то сможет указать мне правильное направление для этого.У нас есть приложение, которое использует Realm для локального управления нашими данными на устройстве.

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

Нам нужно, чтобы оно работало так же, как Git.Вы не можете тянуть без предварительной фиксации ваших изменений.Но вместо фиксации мы продвигаемся вверх.

Мы считаем, что живые данные должны иметь здесь приоритет, поэтому, если есть изменения в живом виде, они должны быть сброшены, но если в живых есть что-то нулевое, но оно у нас естьлокально, тогда мы должны изменить это.

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

Пример:

Мы стремимся сохранить номер imei, который вводит пользователь.Это сохранит в царство БД в то время и попытается обновить действующую базу данных.Если это невозможно при перезапуске приложения и извлечении номеров imei, мы не можем сделать это до тех пор, пока данные, которые у нас локально отсутствуют, в реальном времени не будут отправлены.

Imei.java (Модель области)

public class Imei extends RealmObject {

    @PrimaryKey
    public int id;

    public int deviceId;

    public String imei;

}

Когда мы получаем ответ на выборку:

@Override
public void onResponse(JSONObject response) {
    Gson gson = new GsonBuilder()
   .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
   .create();
    ImeiResponse imeiResponse = gson.fromJson(response.toString(), ImeiResponse.class);

    for (Imei imei : imeiResponse.imeis()) {
        addToDB(imei);
    }
}

И затем мы используем addToDb, где я и представляю, что будет какая-то проверкакак если бы мы смогли вытащить, то у нас есть достаточно хорошее соединение для передачи данных, которые у нас есть локально

public void addToDB(Imei imei)
    {
        Realm realm = Realm.getDefaultInstance();

        realm.beginTransaction();

        realm.copyToRealmOrUpdate(imei);

        realm.commitTransaction();
    }

1 Ответ

0 голосов
/ 01 июня 2018

На тот случай, если кто-то наткнется на этот вопрос, мы в конце концов найдем решение.

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

Каждый раз, когда мы затем отправляемся для извлечения данных, мы сначала проверяем, что очереди запросов, и запускаются, если там что-то есть, если они продолжают отказывать вам, тогдане тяни.

Это казалось лучшим решением для нас.Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...