【发布时间】:2014-06-06 15:27:55
【问题描述】:
我在这里做的是加载所有成就并将它们保存到本地地图:
这是我的代码
public LinkedHashMap<String,Boolean> getAchievements(){
final LinkedHashMap<String,Boolean> achievementMap = new LinkedHashMap<String, Boolean>();
PendingResult<Achievements.LoadAchievementsResult> achievementsResult = Games.Achievements.load(gameHelper.getApiClient(), false);
achievementsResult.setResultCallback(new ResultCallback<Achievements.LoadAchievementsResult>() {
@Override
public void onResult(Achievements.LoadAchievementsResult loadAchievementsResult) {
if(loadAchievementsResult != null) {
if (loadAchievementsResult.getStatus().getStatusCode() == GamesStatusCodes.STATUS_OK) {
if (loadAchievementsResult.getAchievements() != null) {
AchievementBuffer achievementBuffer = loadAchievementsResult.getAchievements();
for(Achievement achievement : achievementBuffer){
achievementMap.put(achievement.getName(),achievement.getState() == Achievement.STATE_UNLOCKED);
}
achievementBuffer.close();
}
}
}
}
});
return achievementMap;
}
一切正常,即使我很确定它不能与返回的 HashMap 一起工作,因为它是空的。据我了解,我只是创建一个空的哈希图,设置一个“监听器”并返回空的哈希图。我认为当数据在未来某个时间点准备好时调用回调,但由于它现在正在工作,我在从这个方法返回之前在 hashmap 中有数据,即使我不等待它或任何东西。不要误会我的意思,我很高兴它的工作如此简单,但我想我不能确定当我返回时数据是否已经写入 hasmap,因此可能会遇到网络连接速度较慢的问题。
我是对的,谁能告诉我,为什么在我从这个方法返回之前调用回调?
可能是这种情况,因为数据以某种方式被缓冲,并且android在设置结果回调时立即调用回调?
【问题讨论】:
标签: android google-play-services achievements