Как уведомить пользователя только один раз, если модернизация нескольких вызовов возвращает то, что вам нужно? - PullRequest
0 голосов
/ 17 января 2019

Retrofit звонит каждые X секунд и возвращает список объектов. Если какой-либо объект списка имеет то, что мне нужно, он должен уведомить пользователя.

Проблема, которую я не могу решить, это то, что модернизация делает новый вызов каждые X секунд и возвращает новый список объектов. Но объекты или один из объектов могут быть одинаковыми, и если это правда, нет необходимости уведомлять пользователя снова. Как это сделать?

                @Override
                public void onResponse(Call<LiveScore> call, Response<LiveScore> response) {
                    if (!response.isSuccessful()) {
                        Toast.makeText(MainService.this, response.code(), Toast.LENGTH_SHORT).show();
                    }
                    liveScore = response.body();
                    List<Result>results = response.body().getResult();

                    for (int i = 0; i < results.size(); i++) {
                        //here i check all object for a match
                        int homeScore = Integer.parseInt(results.get(i).getScores().getFirstQuarter().get(0).getScoreHome());
                        int awayScore = Integer.parseInt(results.get(i).getScores().getFirstQuarter().get(0).getScoreAway());
                        if (homeScore >= 5 && awayScore >= 5) {
                        //if true and
                        // if current position of object previously has      
                        //not notification, notify 
                        }
                    }
                }

1 Ответ

0 голосов
/ 17 января 2019

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

private final Set<Result> uniqueResults = new HashSet<>();

@Override
public void onResponse(Call<LiveScore> call, Response<LiveScore> response) {
    if (!response.isSuccessful()) {
        Toast.makeText(MainService.this, String.valueOf(response.code()), Toast.LENGTH_SHORT).show();
        return;
    }
    liveScore = response.body();

    for(Result r : response.body().getResult()) {
        if(uniqueResults.add(r)) {
            // notify user
        }
    }

});

Вам также нужно переопределить equals() и hashcode() в вашем классе Result.

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