android - 如何使“计数”不断增加而“计数”又不从 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。
我希望我清楚地问了这个问题。
解决方案
您只设置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);
推荐阅读
- optimization - IBM Optimization Studio OPL,为什么不遵守约束?
- ruby-on-rails - 使用 Roo 导入 Google 电子表格内容时排除标题
- twitter-bootstrap - 显示数据属性引导模式
- unit-testing - 我需要帮助来生成对 angular6 中 fromEvent 可观察的测试
- umbraco - 来自 uskinned 网站的 Umbraco 主题不起作用
- rdf4j - RDF4J 2.4.0-M3 GeoSPARQL 查询不工作
- php - 从未设置的多维数组中删除数组
- excel - 将任何长度的有符号十六进制数转换为有符号十进制数 (Excel)
- javascript - Vue.js fetch 返回空的 responseText
- c# - 在 Linq 查询中使用布尔属性或 Id 过滤掉结果