Firebase Databaseのすべてのキー内のデータを読み込むようにします。Firebaseデータベースから特定のキーを除くすべてのキーのすべてのデータを読み取るにはどうすればよいですか?
ここに私のデータベース のスナップショットがあります。
app_nameの下にあるキーはユーザーを表し、ユーザーキー内のすべてのキーにはデータが含まれています。そのようなユーザーキーの中からデータを読み取ることができるようにする必要があります(追加するデータ以外のすべてのデータを読み取る場合と同じように)。私は明らかにすべてのユーザーの鍵を知らず、そのリストは後で拡張または最小化することができます。 FirebaseDatabase.getInstance.getReference.child(string)
を使用して私がアクセスできる唯一のレベルは、アプリ名の下にあります。各ユーザーキー内のキー内のデータを読み取ってコンテンツをの形式で表示する方法がありますか?リストビューまたはリサイクラーアダプター?
EDIT:
FirebaseRecyclerAdapter mAdapter;
public FeedFragment() {
//empty constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mFirebaseDatabase = FirebaseDatabase.getInstance();
mQuestionDatabaseReference = mFirebaseDatabase.getReference();
// Inflate the layout for this fragment
View rootView = inflater.inflate(R.layout.fragment_feed, container, false);
RecyclerView recycler = (RecyclerView) rootView.findViewById(R.id.feed_view_list);
recycler.setHasFixedSize(false);
recycler.setLayoutManager(new LinearLayoutManager(getActivity()));
mAdapter = new FirebaseRecyclerAdapter<DataGetter, StatsViewHolder>(DataGetter.class, 0, StatsViewHolder.class, mQuestionDatabaseReference) {
@Override
public void populateViewHolder(FeedViewHolder viewHolder, DataGetter feedDisplay, int position) {
int layout = getItemViewType(position);
if (layout == R.layout.binary_feed) {
viewHolder.setQuestionTextBin(textDisplay.getQuestionText());
viewHolder.setbOption1(textDisplay.getOption1());
viewHolder.setbOption2(textDisplay.getOption2());
}
else if (layout == R.layout.rating_feed) {
viewHolder.setQuestionTextRat(textDisplay.getQuestionText());
}
else {
viewHolder.setQuestionTextMul(textDisplay.getQuestionText());
viewHolder.setmOption1(textDisplay.getOption1());
viewHolder.setmOption2(textDisplay.getOption2());
viewHolder.setmOption3(textDisplay.getOption3());
if (textDisplay.getNoOfOptions() >= 4) {
viewHolder.setmOption4(textDisplay.getOption4());
}
if (textDisplay.getNoOfOptions() == 5) {
viewHolder.setmOption5(textDisplay.getOption5());
}
}
}
@Override
public int getItemViewType(int position)
{
int view;
if(getItem(position).getQuestionType() == MainActivity.BINARY){
view = R.layout.binary_feed;
}
else if(getItem(position).getQuestionType() == MainActivity.RATING) {
view = R.layout.rating_feed;
}
else //if(getItem(position).getQuestionType() == MainActivity.MULTIPLE)
{
view = R.layout.multiple_feed;
}
return view;
}
};
recycler.setAdapter(mAdapter);
return rootView;
}
@Override
public void onDestroy()
{
super.onDestroy();
mAdapter.cleanup();
}
が試み2:上記のコードで
FirebaseIndexRecyclerAdapter mAdapter;
public FeedFragment() {
// empty constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mFirebaseDatabase = FirebaseDatabase.getInstance();
mQuestionDatabaseReference = mFirebaseDatabase.getReference();
// Inflate the layout for this fragment
View rootView = inflater.inflate(R.layout.fragment_feed, container, false);
RecyclerView recycler = (RecyclerView) rootView.findViewById(R.id.feed_view_list);
recycler.setHasFixedSize(false);
recycler.setLayoutManager(new LinearLayoutManager(getActivity()));
//attempt -> from Firebase documentation, loop over all data
final Query feedQuery = mQuestionDatabaseReference;
ArrayList<DataSnapshot> feedListData = new ArrayList<DataSnapshot>();
feedQuery.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
int i = 0;
for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
ArrayList.add(postSnapshot);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
// Getting Post failed, log a message
Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
// ...
}
});
mAdapter = new FirebaseIndexRecyclerAdapter<DataGetter, FeedViewHolder>(DataGetter.class, 0, FeedViewHolder.class,
feedQuery,mQuestionDatabaseReference) {
//remaining code is same as attempt 1
}
特定のノードをその値に基づいて除外する方法は、FirebaseデータベースAPIにはありません。 https://stackoverflow.com/a/39195551/209103 –
ああ、大丈夫です。 @FrankvanPuffelenありがとうございました。しかし、最初の部分を達成するための方法はありますか?その質問で説明されているすべてのデータを読むことですか? –
データベースの任意の場所から読み取ることができます。ですから、特定のユーザのための鍵が必要な場合は、 '/ app_home/$ uid'を読んでください。すべてのユーザを読むには、 '/ app_home'を読んでから、ユーザをループします。 https://firebase.google.com/docs/database/web/lists-of-data#listen_for_value_events –