私のアプリケーションのフィールドでエラーの数をチェックするためにこの関数を作っています。 だから私はこのコードを作りました:FirebaseのonDataChange()で奇妙なHashMapエラーが発生しました
private int getSegnalations(final Location location, DatabaseReference ref, final HashMap<Location,String>mapLocation) {
final List<Segnalation> matches = new LinkedList<>();
final String key = mapLocation.get(location);
Query query = ref.child("segnalation");
segnalationDialog = createProgressDialog(getActivity(),segnalationDialog,getString(R.string.download));
query.addValueEventListener(new ValueEventListener()
{
@Override
public void onDataChange(DataSnapshot dataSnapshot)
{
stopProgressDialog(segnalationDialog);
for(DataSnapshot dS : dataSnapshot.getChildren())
{
Segnalation segnalation = dS.getValue(Segnalation.class);
Log.d("keys:",segnalation.getIdPark()+","+mapLocation.get(location));
if(segnalation.getIdPark().equals(key))
{
matches.add(segnalation);
}
}
}
@Override
public void onCancelled(DatabaseError databaseError)
{
stopProgressDialog(segnalationDialog);
showErrorMessage(getActivity(),getString(R.string.dbProblem));
}
});
return matches.size();
}
バグがLog.dが私にこのラインを示していることである:
D/keys:: -KTijPwCAd7M7wdZms3S,-KTy7n4WcCx3IUWRsRDX
D/keys:: -KTjJYQGW8_k6Dpi_z7W,-KTy7n4WcCx3IUWRsRDX
D/keys:: -KTjKby31PU7PkJWrb5U,-KTy7n4WcCx3IUWRsRDX
D/keys:: -KTy7n4WcCx3IUWRsRDX,-KTy7n4WcCx3IUWRsRDX
をしかしバイパスで、私にサイズ0ではなく1
を返す場合なぜですか?このコードのエラーは何ですか?
Firebaseデータは非同期にロードされます。つまり、 'matches.size()'を返す頃にはまだサーバから何もロードされていません。解決策は、サイズを必要とするコードを 'onDataChange()'に移動することです。 http://stackoverflow.com/questions/31700830/synchronous-blocking-operation/31702957 –
@FrankvanPuffelenを参照してください申し訳ありません、私は2つの子供に2つの異なるクエリを行う必要があります、どのようにすべてのデータを取得するには? – nani