Codename One EasyThread реализация, которая повторяет работоспособный, если его результат ложен - PullRequest
0 голосов
/ 29 августа 2018

Примечание для читателей: этот вопрос относится только к кодовому имени 1.

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

У меня в init есть вызов этого метода:

private void getStartData() {
    Runnable getBootData = () -> {
        if (serverAPI.getSomething() && serverAPI.getXXX() && ...) {
            isAllDataFetched = true;
        } else {
            Log.p("Connection ERROR in fetching initial data");
        }
    };
    EasyThread appInfo = EasyThread.start("APPINFO");
    appInfo.run(getBootData);
}

Каждый метод serverAPI в этом примере является синхронным методом, который возвращает true в случае успеха, false в противном случае. Мой вопрос заключается в том, как изменить этот EasyThread, чтобы повторять все вызовы (serverAPI.getSomething() && serverAPI.getXXX() && ...) через одну секунду , если результат равен false, и снова через еще одну секунду и т. Д., Пока результат не будет true.

Я не хочу показывать пользователю ошибку или предупреждение: я буду показывать предупреждение, только если статическое логическое значение isAllDataFetched равно false, когда запрашиваемые данные строго необходимы.

Я пытался внимательно прочитать документацию EasyThread и Runnable, но я не понимал, как обращаться с этим вариантом использования.

1 Ответ

0 голосов
/ 30 августа 2018

Поскольку это поток, вы можете легко использовать Thread.sleep(1000) или, проще, Util.sleep(1000), который просто поглощает InterruptedException. Так что-то вроде этого будет работать:

while(!isAllDataFetched) {
    if (serverAPI.getSomething() && serverAPI.getXXX() && ...) {
        isAllDataFetched = true;
    } else {
        Log.p("Connection ERROR in fetching initial data");
        Util.sleep(1000);
    }
}
...