如何在没有侦听器的情况下从Firebase数据库中检索数据?

时间:2017-09-03 21:04:14

标签: android database performance firebase server

现在我正在开发一款Android应用,我刚开始使用Firebase。

我的问题是:如何在不使用侦听器的情况下从firebase数据库中检索数据?

在我的游戏中,我保存了所有用户的高分,当用户进入“排行榜”页面时,我需要从数据库中获取数据。

我看到了一些解决方案,这对我的情况不利。 其中之一是:

mRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            String value = dataSnapshot.getValue(String.class);
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {

        }
    });

这个解决方案对我不好,因为每次用户的高分都在改变时,我的应用程序无法进入服务器,因为如果我有2万人在同一时间玩,那么游戏就会卡住。

所以我不能使用这个监听器,因为它会使游戏变得非常慢。

我的目标是找到一种方法来改变高分,而不提醒当前正在玩游戏的其他人,我的意思是我需要更新他自己的每个用户分数,并且当用户转到“排行榜“页面,只有这样我才会去服务器。

这里的解决方案是什么?

或者我可以用另一种方式使用这个监听器吗?

如果我的问题不明确,请在评论中问我。

谢谢!

我的台词:

 public static void setUserHighScoreToServer(Context context,boolean isClassic,int scoreNum)
{
    com.firebase.client.Firebase mRef;
    mRef= new com.firebase.client.Firebase("...");
    String name = InternalStorage.getUserName(context);
    String classic = "";
    if(isClassic)classic="Classic";
    else classic="Arcade";
    com.firebase.client.Firebase mRefChild = mRef.child(name+classic);
    mRefChild.setValue(String.valueOf(scoreNum));


}

2 个答案:

答案 0 :(得分:3)

这是一种在不监听数据更改的情况下检索数据的官方方法。

 // Add all scores in ref as rows 

scores.addListenerForSingleValueEvent( new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot snapshot) {
        for (DataSnapshot child : snapshot.getChildren()) { 
            ... 
        } 
    }
}

此处提供更多信息:https://firebase.google.com/docs/reference/android/com/google/firebase/database/DataSnapshot

答案 1 :(得分:1)

如果您不需要实时更新,您可以随时对您的数据库进行Rest api调用。 只需进行GET调用即可检索您的数据

https://[PROJECT_ID].firebaseio/[path].json

你很高兴 您还可以使用rest api调用更新或创建新密钥。