Problem mit Firebase und Java Parallelität [geschlossen]Android

Forum für diejenigen, die für Android programmieren
Anonymous
 Problem mit Firebase und Java Parallelität [geschlossen]

Post by Anonymous »

Meine Implementierung funktioniert perfekt in iOS mit Swift/Swiftui mit Fertigstellungshandlern. Mischen Sie die Auswahl von einem Benutzer zum nächsten für einen und bis zu drei Benutzer.

Code: Select all

public class UsersActivity extends AppCompatActivity {

private List userList;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

userList = new ArrayList();

getUserCount(); 
Dann < /p>
private void readUserCountData(Query query, UsersActivity.AllUsersCount listener) {

listener.onStart();

query.addListenerForSingleValueEvent(new ValueEventListener() {

@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
listener.onComplete(dataSnapshot);
} else { // dataSnapshot doesn't exist
Log.e(TAG, "dataSnapshot doesn't exist!!!");
}
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage());
listener.onFailure();
}
});
}
Und zuletzt die GetUSerCount Funktion:
private void getUserCount() {

ref = mFirebaseDatabase.getReference("USERS");
query = ref.orderByValue().equalTo(true);

// Completion Handler for Lookups
readUserCountData(query, new UsersActivity.AllUsersCount() {
@Override
public void onComplete(DataSnapshot dataSnapshot) {
int playerIndex = 0;

// Clear the List
userList.clear();

// Determine the number of users
numUsers = (int) dataSnapshot.getChildrenCount();

for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
String userId = snapshot.getKey();
setUsername(userId, playerIndex); //
Der nächste Fertigstellungshandler, mit dem der Benutzername von Benutzern nach Abschluss der obigen Funktion aufgerufen wird: < /p>
private interface UserUsernameCallback {
void onComplete(DataSnapshot dataSnapshot);
void onStart();
void onFailure();
}

private void readUsernameData(Query query, UsersActivity.UsernameCallback listener) {

listener.onStart();

query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
listener.onComplete(dataSnapshot);
} else { // dataSnapshot doesn't exist
Log.e(TAG, "dataSnapshot doesn't exist!!!");
}
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage());
listener.onFailure();
}
});
}

private void setPlayerUsername(final String userId, final String userAliasId, final int playerIndex) {

userReference = mFirebaseDatabase.getReference("Users");
userQuery = userReference.child(userId).child("username");

// Completion Handler
readPlayerUsernameData(userQuery, new UsersActivity.UsernameCallback() {

@Override
public void onComplete(DataSnapshot dataSnapshot) {
String username = (String) dataSnapshot.getValue();

// Create the UserResult object with users username
UserResults user = new UserResults(username);
// Add them to the list
userList.add(user);

// Load users results
for (int i = 0; i < gameList.size(); i++) {
setPlayerPicks(userId, userIndex, gameList.get(i).getKey(), i);
}
}
}
}
< /code>
Als nächstes heißt die SetUserPicks: < /p>
private interface UserPicksCallback {
void onComplete(DataSnapshot dataSnapshot);
void onNoResult();
void onStart();
void onFailure();
}

private void readUserPicksCallback(Query query, UsersActivity.UserPicksCallback listener) {
listener.onStart();

query.addListenerForSingleValueEvent(new ValueEventListener() {

@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
listener.onComplete(dataSnapshot);
} else { // dataSnapshot doesn't exist
listener.onNoResult();
}
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

Log.d(TAG, databaseError.getMessage());
//
listener.onFailure();
}
});
}

private void setUserPicks(final String userId, final int playerIndex, final String gameId, final int pickIndex) {

userPicksReference = mFirebaseDatabase.getReference("USERPICKS");
userPicksQuery = userPicksReference.child(currPool).child(userId).child(String.valueOf(currWeek)).child(gameId);

// Completion Handler for Player Picks Lookups
readPlayerPicksCallback(userPicksQuery, new UsersActivity.UserPicksCallback() {

@Override
public void onComplete(DataSnapshot dataSnapshot) {
// Set the Players Picks Info here
playerList.get(playerIndex).setUserPicks(dataSnapshot, pickIndex);
setPickInfo(playerIndex, pickIndex);
}
}
}
< /code>
Alles wird aus Firebase abgerufen, aber wie ich bereits sagte, sind einige der Benutzerauswahl im Diagramm bösartig! Die angezeigten Ergebnisse, die nicht mit den tatsächlichen Daten in Firebase übereinstimmen.>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post