В этой программе я устанавливаю значение одного элемента массива (flag1[0]) равным 1, если выполняется условие «если». Когда я печатаю его (внутри класса), оно показывает значение, установленное как 1. Но когда я пытаюсь получить к нему доступ за пределами внутреннего класса, он показывает значение как 0. Как мне его разрешить? ( getCount() и setCount() являются геттерами и сеттерами, даже они не работают!)
public boolean checkUser(final String user, String program) {
database = FirebaseDatabase.getInstance();
final DatabaseReference reference;
reference = database.getReference("UserNames").child(program);
final int[] flag1 = {0};
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot data : dataSnapshot.getChildren()) {
String key = data.getKey();
Log.println(Log.ERROR,"msg",key);
if (data.getKey().equals(user))
{
musername.setError("UserName already Exists1!");
flag1[0] = 1;
setCount(1);
Log.println(Log.ERROR,"msg", String.valueOf(flag1[0])+String.valueOf(getCount()));//Shows 1 here
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Log.println(Log.ERROR,"mesg", String.valueOf(flag1[0])+String.valueOf(getCount()));//Shows 0 here
if(getCount()==0)
return true;
return false;
}
return
данные еще не загружены. Решение состоит в том, чтобы либо переместить код, которому нужны данные, вonDataChange()
(как показано здесь), либо вызвать оттуда (как показано здесь). - person Frank van Puffelen   schedule 27.12.2017