【问题标题】:How can i count a query / dataSnapshot? [duplicate]我如何计算查询/数据快照? [复制]
【发布时间】:2019-06-16 23:59:08
【问题描述】:

我想在我的 StartActivity 中显示活跃用户的数量。用户分为两组:玩家和观众。我在我的数据库中使用布尔值进行了尝试。如何显示/统计用户数?

数据库: Firebase Pic 开始活动: XML Pic

这是我的StartAytivity.class 代码:

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_start);

        Button run = findViewById(R.id.button2);
        run.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(StartActivity.this, MainActivity.class);
                startActivity(intent);
            }
        });

        FirebaseApp.initializeApp(this);

        watcher = findViewById(R.id.textView3);
        player = findViewById(R.id.textView4);

        onlineCount();
    }

这是我的 OnlineCount 代码:

public void onlineCount(){
        //watcher
        refwatcher = FirebaseDatabase.getInstance()
                .getReference("online_list")
                .child("watcher")
                .child(Objects.requireNonNull(FirebaseAuth.getInstance().getCurrentUser()).getUid()).child("online");

        Query query = refwatcher.orderByChild("online").equalTo(true);


        refwatcher.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                wcount = (int) dataSnapshot.getChildrenCount();

                watcher.setText(getString(wcount) + getText(R.string._29_349_watchers_online));


            }

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

            }
        });

        //player
        DatabaseReference refplayer = FirebaseDatabase.getInstance().getReference("online_list").child("player");

        refplayer.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                player.setText("1" + getText(R.string._230_player_online));
            }

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

            }
        });
    }

这是我的调试代码:

   Caused by: java.lang.NullPointerException
        at java.util.Objects.requireNonNull(Objects.java:203)
        at com.bbinktattoo.nerve.StartActivity.onlineCount(StartActivity.java:65)
        at com.bbinktattoo.nerve.StartActivity.onCreate(StartActivity.java:57)
        at android.app.Activity.performCreate(Activity.java:7326)
        at android.app.Activity.performCreate(Activity.java:7317)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)

【问题讨论】:

标签: java android firebase firebase-realtime-database


【解决方案1】:

您的问题与您的问题所暗示的问题无关。您想知道如何计算您的数据库条目。 firebase 中的每个元素都是一个节点,可以有 n 个子节点,并且恰好有 1 个父节点。节点与其父节点的关系为1:1,节点与其子节点的关系为1:n

所以如果你想计算元素的数量,你必须在父节点上调用 getChildren() 方法,这将返回 nn 节点的引用.

但是,您似乎没有按预期初始化 Firebase SDK。确保您阅读并理解相关文档 https://firebase.google.com/docs/android/setup

我猜你没有设置正确的配置参数

【讨论】:

  • 您链接到错误的文档 :) 他使用的是 Android,而不是管理 SDK
  • 你说得对,已修复 :-) 谢谢
【解决方案2】:

您的问题不在于计数本身,而是 Firebase 似乎在您的应用中设置不正确。请务必按照official guide 一步一步进行操作。还要检查 Logcat 是否有来自 Firebase 的错误和警告,通常会有一些有用的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    • 2021-11-21
    • 2021-06-17
    • 2014-09-21
    • 1970-01-01
    • 2016-05-13
    相关资源
    最近更新 更多