首页 > 解决方案 > 从Java中的回调返回值

问题描述

所以在我的应用程序中,我有 2 个玩家在游戏中。玩家 1 被分配正面或反面,然后玩家 2 将被分配到玩家 1 没有的一侧。即如果玩家 1 是正面,那么玩家 2 是反面,反之亦然。

为了在将一方分配给玩家 2 之前检查哪一方玩家 1,我有一个回调设置来获取已分配哪一方玩家 1。回调看起来像这样。

public interface Player1SideCallback {
    void onCallback(String side);
}

private void player1Side(final Player1SideCallback callback) {
        FCGames.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull final DataSnapshot dataSnapshot) {
                HomePage.getCurrentGameID(new HomePage.CallbackID() {
                    @Override
                    public void onSuccess(String currentGameID) {
                            String player1Side = dataSnapshot.child(currentGameID).child("HeadsOrTails").getValue().toString();
                            callback.onCallback(player1Side);
                        }
                });
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
}

这是一个非常基本的回调。

join现在,当玩家使用以下代码段单击他们作为玩家 2 分配给游戏的按钮时,我是这样的:

    adapter = new MyRecyclerViewAdapter(this, openGames, new MyRecyclerViewAdapter.OnButtonClickListener() {
        @Override public void onButtonClick(String id, final int position) {
            String gameID = openGames.get(position);


            second = new User(userName, 0, getSide2(), FirebaseAuth.getInstance().getUid(), gameID, false);


            gm.setUser2(second);
            FCGames.child(gameID).child("user2").setValue(second);
            HomePage.setCurrentGame(gameID);
            HomePage.setUserPosition(2);
        }});
enter code here

如您所见,我在变量周围留了行空格,second因为这是实际创建新播放器的地方。它说它getSide2()正在为玩家 2 分配一方。

但是,我正在努力做到这一点。我在一个调用的方法中调用我的回调,getSide2()以尝试将右侧正确分配给用户 2

private String getSide2() {
    player1Side(new Player1SideCallback() {
        @Override
        public void onCallback(String side) {
            if(side.equals("Heads")) {
                String side2 = "Tails";
            } else {
                String side2 = "Heads";
            }
        }
    });
}

因此,我想将 player2 分配给带有变量的一侧,side2但我不确定如何使用回调从方法中返回此值。

如何使用这种类型的逻辑将正确的一侧正确分配给用户 2?

标签: javaandroidfirebase

解决方案


推荐阅读