首页 > 解决方案 > 无需从 Firebase 进行更改即可获取孩子

问题描述

在我的应用程序中,我想实现一个聊天功能。对于每个聊天,都会创建一个唯一的聊天 ID,需要在开始时获取该聊天 ID。我阅读了有关使用ListenerForSingleValueEvent()获取 a 的信息dataSnapshot,但似乎只有在数据发生更改时才能达到。如何在不需要更改某些内容的情况下从孩子那里获取数据?

像这样,我没有得到我的聊天 ID:

public class ChatActivity extends AppCompatActivity {

    String chatId;
    DatabaseReference mDatabaseUser, mDatabaseChat;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_chat);

        mDatabaseUser = FirebaseDatabase.getInstance().getReference().child("Users").child("ChatId");
        mDatabaseChat = FirebaseDatabase.getInstance().getReference().child("Chat");
        getChatId();
    }
 
    private void getChatId(){
        mDatabaseUser.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()){
                    chatId = dataSnapshot.getValue().toString();
                    mDatabaseChat = mDatabaseChat.child(chatId);
                }
            }
            @Override
            public void onCancelled(DatabaseError databaseError) {
            }
        });
    }
}

标签: javaandroidfirebasefirebase-realtime-database

解决方案


您可以使用 addValueEventListner 方法从 firebase 实时数据库中获取值。

private void getChatId() { 
    DatabaseReference firebaseDatabaseReference = FirebaseDatabase.getInstance().getReference(dbPath);
    //dbPath is the path of the data stored in firebase required to receive
    firebaseDatabaseReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            //your code here
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}

请参阅Firebase 文档


推荐阅读