Вы никогда не узнаете, сколько раз срабатывает ValueEventListeners
, как это происходит, потому что значение flag
всегда будет оставаться 0
. Это происходит из-за асинхронного поведения метода onDataChange()
, который вызывается еще до того, как вы пытаетесь получить данные из базы данных. Что действительно происходит, так это то, что вы пытаетесь получить данные из базы данных и сразу же попытаетесь записать их, в то время как переменная flag
имеет начальное значение 0
. Затем, когда получение данных из базы данных завершается, оно меняет значение флага, но никогда больше не читается.
Быстрое решение этой проблемы - добавить три разных флага внутри каждого обратного вызова и попытаться выполнить вход отдельно, только внутри метода onDataChange()
, например:
msgRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot1) {
ms = dataSnapshot1.getValue(String.class);
flag1++;
Log.i("flag1", String.valueOf(flag1));
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {}
});
FuidRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot2) {
fUid = dataSnapshot2.getValue(String.class);
flag2++;
Log.i("flag2", String.valueOf(flag2));
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {}
});
secretRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot3) {
st = dataSnapshot3.getValue(String.class);
flag3++;
Log.i("flag3", String.valueOf(flag3));
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {}
});
Если вам нужно в своем коде получить значение этого флага вне метода onDataChange()
, я рекомендую вам посмотреть последнюю часть моего ответа из этого поста , в котором Я объяснил, как это можно сделать с помощью пользовательского обратного вызова. Вы также можете взглянуть на это видео для лучшего понимания.
Edit:
msgRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot1) {
ms = dataSnapshot1.getValue(String.class);
flag++;
FuidRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot2) {
fUid = dataSnapshot2.getValue(String.class);
flag++;
secretRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot3) {
st = dataSnapshot3.getValue(String.class);
flag++;
Log.i("flag", String.valueOf(flag));
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {}
});
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {}
});
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {}
});