java - Firebase实时数据库: How to use addValueListener

标签 java android firebase firebase-realtime-database

我是 Android 编程和使用 Firebase 创建多人游戏的初学者。我正在考虑用户如何开始游戏的逻辑。

我想做的是当用户玩游戏的房间满了时显示Toast。但我想知道其他设备如何判断房间是否已满。我想使用 addListenerForSingleValueEvent 来实现此目的,但它没有按我的预期工作。

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

    String roomName = getIntent().getExtras().getString("ROOM_NAME");
    thisRoom = FirebaseDatabase.getInstance().getReference().child(roomName);

    thisRoom.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            //when the room gets full, start the game
            int numberOfPlayers = (int) dataSnapshot.getChildrenCount();
            if (numberOfPlayers >= 2) {
                Toast.makeText(MultiplayerStreetViewActivity.this, "Game Starts", Toast.LENGTH_LONG).show();
           //do something
            }
        }

我检查了它是否可以使用两个模拟器工作。对于第一个较早开始 Activity 的玩家,添加第二个值时不会显示 Toast。设备如何检查何时自动添加新值? 我确信我误解了某些东西并犯了愚蠢的错误..我怎样才能做我想做的事?

最佳答案

我有一个想法,那就是为 thisRoom 添加子事件监听器,并使用本地设备上的数组列表来管理房间中的玩家。每次您添加、修改或删除房间中的玩家时。监听器将立即触发,您可以在数组列表上添加、修改或删除。因此,您可以知道房间是否已满(根据您的数组列表是否已满)。

 thisRoom.addChildEventListener (new ChildEventListener(){
    public void onCancelled(DatabaseError error)
    {
        //say something to player 
    }
    public void onChildAdded(DataSnapshot snapshot, String previousChildName)
    {
        Player newPlayer = snapshot.getValue(Player.class);
        //then add newPlayer to local array list
    }
    public void  onChildChanged(DataSnapshot snapshot, String previousChildName)
    {
        Player changedPlayer = snapshot.getValue(Player.class);
        //then do something to modify info of the player in the array list 
    }
    public void  onChildMoved(DataSnapshot snapshot, String previousChildName) 
    {
       //I have no idea for this method
    }
    public void  onChildRemoved(DataSnapshot snapshot)
    {
       //remove player from your array list
    }
});

关于java - Firebase实时数据库: How to use addValueListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52912959/

相关文章:

java - 将 Maven 父 pom/bom (没有 java src)发布到 Nexus 的正确方法是什么

android - androidx 和 com.android.support 之间的区别

java - 如何仅在 bean 存在时注入(inject)它

java - 在本地应用程序中指定 JAAS 配置文件

android - 在 Android 中,如何对 Kinvey 数据存储进行不区分大小写的查询?

android - 如何像 WhatsApp 一样以 PIP 模式播放 YouTube 视频?

php - 适用于 PHP 的 Firebase Admin SDK 是隐藏 Firebase 凭据的有效方法吗?

firebase - 如何更改firebase电话身份验证中的短信验证模板

firebase - 我的 Flutter firebase 注销与我的预订系统发生冲突

java - 我应该如何将 try-with-resources 与 JDBC 结合使用?