【问题标题】:Query firebase database and retrieve from 2 nodes查询firebase数据库并从2个节点检索
【发布时间】:2017-08-28 14:17:56
【问题描述】:

我想从 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

我把问题说得尽可能清楚。 谢谢大家。

【问题讨论】:

    标签: java android firebase firebase-realtime-database


    【解决方案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。

    【讨论】:

    • 谢谢,正如我提到的,我还想同时从另一个节点“user_account_settings”中检索数据,该节点位于“posts”节点下的 (user_id) 上。请看一下我在问题中添加的屏幕截图。 PS。谢谢你帮助我
    猜你喜欢
    • 1970-01-01
    • 2019-02-07
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多