从Java中的回调返回值

时间:2018-11-22 06:05:25

标签: java android firebase

所以在我的应用中,我有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正确分配正确的一面?

0 个答案:

没有答案