私がしようとしているのは、FirebaseからユーザIDのリストを取得し、それらの各ユーザからデータを取得することです。私が抱えている問題は、IDのリストを喜んで検索することができますが、動作していないようです。このクエリのonDataChange
には決して到達しません。Firebase Android onDataChangeは
私は関係なく、私は何が今までlistOfItems
に追加されていないとあなたはまだonDataChange
に達することができない何のforループを除去しても、IDの値をハードコーディングすることにより、configurePage
内のコードを修正しようとしたませんが、しています。 configurePage
のログ行には正しいID数が表示されているため、2番目の開始時刻に終了しない最初のクエリを除外できます。
まずクエリ:
public void getIDs() {
spinner.setVisibility(View.VISIBLE);
search = mDatabase.child("linked_users").child(userID);
val = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.d(TAG, "Test:" + dataSnapshot.getChildrenCount());
for (DataSnapshot singleChild : dataSnapshot.getChildren()) {
listOfIDs.add(singleChild.getKey());
}
if (listOfIDs.size() == 0) {
spinner.setVisibility(View.GONE);
noResultsLabel.setVisibility(View.VISIBLE);
countLabel.setVisibility(View.GONE);
} else {
countLabel.setText("Total users: " + listOfIDs.size());
countLabel.setVisibility(View.VISIBLE);
configurePage();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.d(TAG, "DB problem");
AlertDialog.Builder dialog = new AlertDialog.Builder(AgentViewUsers.this);
dialog = databaseDialog(dialog);
dialog.show();
}
};
search.addListenerForSingleValueEvent(val);
}
2番目のクエリ:あなたが期待される振る舞いを見ている何
public void configurePage() {
Log.d(TAG, "test = " + listOfIDs.size());
for (String id : listOfIDs){
mDatabase.child("users").child(id).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
AgentUserViewObject obj = new AgentUserViewObject();
obj.name = dataSnapshot.child("full_name").getValue().toString();
obj.address = dataSnapshot.child("address").getValue().toString() + ", " + dataSnapshot.child("towncounty").getValue().toString() + ", " + dataSnapshot.child("postcode").getValue().toString();
obj.requestCount = Integer.parseInt(dataSnapshot.child("requests_submitted").getValue().toString());
listOfItems.add(obj);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
mLayoutManager = new LinearLayoutManager(AgentViewUsers.this);
mAdapter = new AgentUserViewAdapter(listOfItems);
mRecyclerView.addItemDecoration(new DividerItemDecoration(AgentViewUsers.this,DividerItemDecoration.VERTICAL_LIST));
mRecyclerView.setLayoutManager(mLayoutManager);
mRecyclerView.setAdapter(mAdapter);
spinner.setVisibility(View.GONE);
}
):、あなたが
adapter.notifyDataSetChanged()
を呼び出すことができることをすることができません。 –ログを追加しました - onCancelled呼び出しもonDataChange呼び出しもありません。 – markeh21
私は訂正しました。さらに調査すると、onDataChangeが呼び出され、データが取得されていますが、forループの終了時に取得されないため、リサイクラビューが設定されているときはまだ空です。 – markeh21