首页 > 解决方案 > 如何使“计数”不断增加而“计数”又不从 0 开始

问题描述

我仍然是 Studio Android 的新手并与 Firebase 连接。

我在应用程序上有几个页面,并试图通过 Firebase 收集任何类型的信息。

public class faculty_last_respond extends AppCompatActivity implements View.OnClickListener {

 private Button submitBtn;

 private DatabaseReference fbRef;
 private int count = 0;

protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);

 finalQ = new lastQuestion();


 fbRef = FirebaseDatabase.getInstance().getReference("FacultyResponse/User " + count);


 fbRef.addValueEventListener(new ValueEventListener() {
 @Override
 public void onDataChange(@NonNull DataSnapshot snapshot) {
     if(snapshot.exists())
      count += 1;
 }


submitBtn.setOnClickListener(new View.OnClickListener() {
 @Override
 public void onClick(View v) {

 String inputTextQ2 = textQ2.getText().toString();
 finalQ = new lastQuestion(buttonTextQ1, inputTextQ2, buttonTextQ3, buttonTextQ4, buttonTextQ5);

 fbRef.push().setValue(finalQ); 
 
 lastPage();
 }
 });

}

我正在尝试将每个数据存储在“FacultyResponse/User”+计数路径下。(例如,用户 0、用户 1、用户 2 等)

仅在用户 0 下收集数据的 Firebase 示例

在此处输入图像描述

但如屏幕截图所示,数据仍在用户 0 下。

我不太确定为什么“计数”没有增加 1。

我希望我清楚地问了这个问题。

标签: androidfirebase-realtime-database

解决方案


您只设置fbRef一次,而不是在增加时更新它count

 fbRef = FirebaseDatabase.getInstance().getReference("FacultyResponse/User " + count);


 fbRef.addValueEventListener(new ValueEventListener() {
 @Override
 public void onDataChange(@NonNull DataSnapshot snapshot) {
     if(snapshot.exists()) {
       count += 1;
       dbRef = FirebaseDatabase.getInstance().getReference("FacultyResponse/User " + count);
     }
 }

但是,正如评论的那样,像这样按顺序递增的计数器在 Firebase 中是一种反模式,我建议阅读博文Best Practices: Arrays in Firebase。代替数组,使用 Firebase 的内置push()操作来生成自动递增(但非顺序)的键。

使用它,你最终会得到这个更惯用的代码:

FirebaseDatabase.getInstance().getReference("FacultyResponse").push().setValue(finalQ); 

推荐阅读