0
このプログラムでは、if条件が満たされている場合、1つの配列要素(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;
}
イベントがトリガーされると、内部クラスのすべてのセクションが実行されます。 –
そうですが、どうすれば解決できますか? @JuanCarlosMendoza –
データは非同期でロードされますが、コードは順番に実行されます。これは、 'return'文が実行されるまでに、データがまだロードされていないことを意味します。これを解決するには、データを必要とするコードを** onDataChange()(ここで示すように)(https://stackoverflow.com/a/33204705)に移動するか、そこから呼び出します[ここ](https://stackoverflow.com/a/40099900))。 –