Проблема с параллелизмом Firebase и Java [закрыто]Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Проблема с параллелизмом Firebase и Java [закрыто]

Сообщение Anonymous »

Моя реализация отлично работает в iOS, используя Swift/Swiftui с помощью обработчиков завершения
Вот почему я разочарован Android, поскольку как Firebase, так и Android принадлежат Google!?
Вот проблема, последовательность чтений из Firebase 'un-ocomer nu-ocome wit hon-ocomer ye-ore-ocomer. Смешайте выбор от одного пользователя с другим для одного и до трех пользователей.
Вот моя логика/код:

Код: Выделить всё

public class UsersActivity extends AppCompatActivity {

private List userList;

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

userList = new ArrayList();

getUserCount(); 
Тогда < /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();
}

});

}
и, наконец, функция getUsercount :
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); //
Следующий обработчик завершения, чтобы получить имя пользователя пользователя из приведенной выше функции после его завершения: < /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>
Далее 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>
Все извлечено из Firebase, но, как я сказал, некоторые из выборов пользователей злобны в диаграмме! Отображаемые результаты, чтобы не соответствовать фактическим данным в Firebase.


обновлена ​​с кодом и скринингом.>

Подробнее здесь: https://stackoverflow.com/questions/797 ... oncurrency
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»