Как я могу получить кешированный результат таблицы лидеров в автономном режиме?

После первоначального входа кажется, что GPGS может удерживать пользователя в состоянии «вошел в систему» ​​даже в автономном режиме. Таким образом, я могу играть так, как будто я подключен, а затем, когда у меня есть фактическое подключение, мои результаты/достижения синхронизируются.

Это здорово, но, похоже, это не работает при попытке получить счет из таблицы лидеров в автономном режиме:

Games.Leaderboards.loadCurrentPlayerLeaderboardScore(
        gameHelper.getApiClient(), 
        LD_ID, 
        LeaderboardVariant.TIME_SPAN_ALL_TIME,
        LeaderboardVariant.COLLECTION_PUBLIC).setResultCallback(new ResultCallback<LoadPlayerScoreResult>(){

                @Override
                public void onResult(LoadPlayerScoreResult arg0) {
                        LeaderboardScore c = arg0.getScore();
                        Player.bestScore = (int)c.getRawScore();
                }

});

В онлайн-режиме c.getRawScore() работает, как и ожидалось, но в автономном режиме c равно null (к моему удивлению, потому что я рассудил, что в автономном режиме он просто вернется к кэшированной оценке).

Есть ли способ получить кешированный результат таблицы лидеров?


person Goran Milovanovic    schedule 23.07.2014    source источник
comment
Я не пробовал это и не знал, что это не сработает в автономном режиме. Если он ведет себя таким образом, то лучшим способом было бы сохранить локальную копию лучшего результата в таблице лидеров (в сети) и использовать это значение вместо этого, когда ваш код возвращает значение null. По сути, просто кэшируйте его в своем приложении (и сохраняйте в постоянном хранилище).   -  person free3dom    schedule 24.07.2014


Ответы (1)


Games.Leaderboards.loadCurrentPlayerLeaderboardScore(
        gameHelper.getApiClient(), 
        LD_ID, 
        LeaderboardVariant.TIME_SPAN_ALL_TIME,
        LeaderboardVariant.COLLECTION_PUBLIC).setResultCallback(new ResultCallback<Leaderboards.LoadPlayerScoreResult>(){

                @Override
                public void onResult(LoadPlayerScoreResult res) {
                        Status status = res.getStatus();
                        int statusCode = status.getStatusCode();

                        if (statusCode == GamesStatusCodes.STATUS_NETWORK_ERROR_NO_DATA) {
                            System.out.println("A network error occurred while attempting to retrieve fresh data, and no data was available locally.");
                        } else if (statusCode == GamesStatusCodes.STATUS_NETWORK_ERROR_STALE_DATA) {
                            System.out.println("A network error occurred while attempting to retrieve fresh data, but some locally cached data was available. The data returned may be stale and/or incomplete.");
                        } else {
                            System.out.println(status.getStatusMessage());
                        }
                }

});

Я не тестировал этот код, но он должен работать. Это код отладки, который поможет решить вашу проблему. Запустите это в режиме онлайн и офлайн и посмотрите, что вы получите в каждом случае.

person Ogen    schedule 19.08.2014