我想显示StartActivity中的活动用户数。用户分为两组:选手和观众。我在数据库中使用布尔值尝试了它。如何显示/统计用户?
数据库: Firebase Pic StartActivity: 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)
答案 0 :(得分:1)
您的问题与您的问题所暗示的问题无关。您想知道如何计算数据库条目。 firebase中的每个元素都是一个节点,可以有 n 个子元素,父元素恰好是 1 个。节点与其父节点之间的关系是 1:1 ,而节点与其子节点之间的关系是 1:n 。
因此,如果要计算元素数量,则必须在父节点上调用getChildren()方法,该方法将返回对 n 节点的 n 引用。
但是,似乎您没有按照预期的那样初始化Firebase SDK。确保您阅读并理解相关文档 https://firebase.google.com/docs/android/setup
我猜您没有设置正确的配置参数
答案 1 :(得分:0)
您的问题不是计数本身,而是您的应用程序中Firebase似乎设置不正确。确保逐步遵循official guide。还要检查Logcat中是否有Firebase的错误和警告,通常有一些有用的东西。