我想首先这个问题不会影响我的 iOS 应用程序,并且严格在 Android 中使用 java。
下面是我的代码:
第一个函数调用 Firebase 来获取池中的用户:
private void getPlayerCount() {
playerInPoolQuery = playerInPoolReference.child(poolIf).orderByValue().equalTo(true);
readPlayerCountData(playerInPoolQuery, new PicksActivity.AllPicksPlayerCountCallback() {
@Override
public void onSuccess(DataSnapshot dataSnapshot) {
int playerIndex = 0;
// Determine the number of players in the pool
numPlayersInPool = (int) dataSnapshot.getChildrenCount();
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
String userId = snapshot.getKey();
setPlayerUsername(userId, playerIndex);
playerIndex = playerIndex + 1;
}
}
});
}
以下是获取玩家用户名的代码:
private void setPlayerUsername(final String userId, final int playerIndex) {
userQuery = userReference.child(userId).child("username");
readPlayerUsernameData(userQuery, new SurvivorAllPicksActivity.AllPicksPlayerUsernameCallback() {
@Override
public void onSuccess(DataSnapshot dataSnapshot) {
String username = (String) dataSnapshot.getValue();
AllPicks player = new AllPicks(username);
//
playerList.add(player);
for (int i = 1; i <= currWeek; i++) {
setPlayerPicks(userId, playerIndex, i);
}
}
});
}
所以这就是问题开始的地方:
在上面的代码中,
getPlayerCount
函数检索 Firebase 分配的用户 ID 作为示例:
0yV3uJZAoDWCZNHuRgxrUlKYFgz1
1q4mOwYUKRgRi3QiC8nLAeVy1T62
425HgyfcpXf1OuA4ndTmry24Kij1
4BCIjoreBuRTNtYIOFZLRKxvk0b2
6TIHOsFuXFQ0v6yBpUn3kVqeHDE3
LNeNupya7GcwsZkd44yV22DNU6f1
M7wxpkSMb4R8rmlvo2A7OyqmLzJ2
UnVFJ49IgTYeNGsV9b0aznhV79B3
bGGtRR18jLe14EcXelgiWbHxi5p2
cU5j1txJyZgwSqsQ72T8pfn30oJ2
lDCzcnZToxMw3iTpMvJ988sJMug2
lvqWVfIpexb7n2DtoPwfVWcYpur2
nnr5ahZHKJfb0vn37eMI5oznyD23
o3Aag8bK29WoU4Aa013dYga3HgB3
q5WNLNjiVrcml4gMbu2ovMU4hyZ2
qnxtPKTVMZRTXurDOvE6aJRhH2o2
上面的工作原理完全符合我的预期,因为它是池中按字母顺序排列的玩家内部 id 的实际顺序(firebase 实时数据库如何内部组织/列出节点)
现在这是我遇到问题的地方(这似乎是竞争条件)。
当 get setPlayerUsername
function
被调用时,其执行顺序 skews
基于登录到应用程序的玩家。
我的意思是,如果具有内部标识符
bGGtRR18jLe14EcXelgiWbHxi5p2
的玩家登录,他们将 execute faster
比示例中提供的列表的顺序,并且 breaks
我的索引按字面意思加一,并且倾斜所有内容自登录玩家jumps
以来按预期顺序排列一个位置/索引的玩家信息。
任何用户都会遇到这种情况,因此如果玩家
M7wxpkSMb4R8rmlvo2A7OyqmLzJ2
已登录,那么他们将被第二个索引并扭曲所有玩家结果。
实际上是除了上面列表中的前两名玩家之外的任何人: 0yV3uJZAoDWCZNHRgxrUlKYFgz1 1q4mOwYUKRgRi3QiC8nLAeVy1T62
当他们登录并查看玩家时,信息 100% 准确,因为索引是按正确顺序执行的!?
有谁对我如何解决这个问题有任何解决方案...我无法自己解决!!
Java 的继承机制是一个基本概念,它允许基于现有类创建新类。它允许一个类(称为子类或子类)继承另一个类(超类或父类)的属性和行为(字段、方法)。这促进了代码重用、模块化和可扩展性。 Java中的继承是单继承,这意味着每个类只能直接从一个超类继承。但是,一个类可以通过超类的层次结构间接从多个类继承,这一概念称为多级继承。接口是 Java 的另一个特性,它为方法提供了一种多重继承的形式,允许一个类实现多个接口。通过继承,Java 支持多态性,使不同类的对象能够被视为公共超类的实例。
块引用