查询firebase数据库并从2个节点中检索

时间:2017-08-28 14:17:57

标签: java android firebase firebase-realtime-database

我想从firebase数据库中检索,我已经设置了我的模型来放置内容。我成功地从一个节点检索数据,但我无法这样做,我需要来自2个节点的数据,我想在Recycler View中显示它。但是,我获得成功的地方完全不同。

首先,我将向您展示我从一个节点检索数据的代码,它对我有用。

这是为不同片段中的一个节点工作的代码。

工作片段

    private void updateArrayList() {        

    DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
    Query query = reference
            .child(getString(R.string.dbname_posts))
            .child(FirebaseAuth.getInstance().getCurrentUser().getUid());

    query.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {

            data.add(dataSnapshot.getValue(Userpost.class));
            adapter.notifyDataSetChanged();
        }

以上代码完美无缺。 现在非工作代码,它不会提取任何内容。

    private void updateArrayList() {

    DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
    Query query = reference
            .child(getString(R.string.dbname_posts)).child("profile_photo")
            .child(getString(R.string.dbname_user_account_settings))
            .child("profile_photo");

    query.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {

            data.add(dataSnapshot.getValue(Userpost.class));
            adapter.notifyDataSetChanged();
        }

这是firebase数据库的快照 Firebase Database Snapshot

我在最后提出了尽可能清楚的问题。 谢谢大家。

1 个答案:

答案 0 :(得分:1)

要从特定帖子中获取这些值,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference postIdRef = rootRef.child("posts").child(postId);
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        String pheading = dataSnapshot.child("pheading").getValue(String.class);
        String user_id = dataSnapshot.child("user_id").getValue(String.class);
        Log.d("TAG", pheading + " / " + user_id);

        DatabaseReference ref = rootRef.child("user_account_settings").child(user_id);
        ValueEventListener valueEventListener = new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot ds) {
                String profile_photo = ds.child("profile_photo").getValue(String.class);
                Log.d("TAG", profile_photo);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {}
        };
        ref.addListenerForSingleValueEvent(valueEventListener);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
postIdRef.addListenerForSingleValueEvent(eventListener);

其中postId是您要从中提取数据的帖子的ID。