我打算为自己的论文配备一个监控应用程序,我希望每天计划记录许多数据,而每天都在使用该日期和时间进行记录。它在我的仪表板上,我希望它看起来像Sugar = date1,date2,date3,date4等。
FirebaseAuth mAuth;
FirebaseFirestore db4;
Button b1;
EditText e1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_blood);
b1 = (Button)findViewById(R.id.button7);
e1 = (EditText)findViewById(R.id.editText10);
db4 = getInstance();
mAuth = FirebaseAuth.getInstance();
ActionBar ac = getSupportActionBar();
ac.hide();
Calendar calendar = Calendar.getInstance();
SimpleDateFormat format = new SimpleDateFormat("hh:mm a");
final String time = format.format(calendar.getTime());
TextView t2 = findViewById(R.id.textView24);
t2.setText(time);
Calendar calendar2 = Calendar.getInstance();
SimpleDateFormat format1 = new SimpleDateFormat(("MMMM dd, YYYY"));
final String date = format1.format(calendar2.getTime());
TextView t1 = findViewById(R.id.textView23);
t1.setText(date);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String blood_glucose = e1.getText().toString();
if (blood_glucose.isEmpty()){
e1.setError("Field is Empty");
e1.requestFocus();
} else if (!blood_glucose.isEmpty()) {
FirebaseUser firebaseUser = mAuth.getCurrentUser();
String uid= mAuth.getCurrentUser().getUid();
sugar answer = new sugar(date,time,blood_glucose);
db4.collection("Sugar").document(uid).set(answer);
startActivity(new Intent(Blood.this, Navbar.class));
}
}
});
}
答案 0 :(得分:0)
您在这里有两个主要选择:
您可以在一个文档中记录用户的所有度量。这样做的好处是您只需要读/写一个文档。缺点是您将始终必须阅读整个文档(随着时间的流逝,它可能会变得很大),您无法查询特定的值,并且文档的最大大小为1MB。
您可以在该用户的个人资料下的子集合中记录该用户的每个度量。在这种情况下的优缺点与以前的方法相反。 :)
要将所有度量存储在一个文档中,您需要将每个度量添加到文档中。您当前的文档将覆盖文档中的现有值,但是您可以使用以下类似的方法轻松地将它们与现有数据合并:
sugar answer = new sugar(date,time,blood_glucose);
Map<String, Object> update = new HashMap<>();
update.put("20191118", answer);
db4.collection("Sugar").document(uid).set(update, SetOptions.merge());
因此,在上面的代码中,我们为新的度量创建了一个地图。我们将该测量结果存储在名为20191118
(今天的日期)的字段中,但是您也可以使用任何其他字段名称或store them in an array:
db4.collection("Sugar").document(uid).update("measurements", FieldValue.arrayUnion(answer));
要将用户的每个度量标准存储在该用户的子集合中,您需要在用户个人资料下写一个子集合。因此,通常您会遇到类似/Users/$uid/Measurements/$measurementid
的东西,然后用类似这样的东西来写它:
sugar answer = new sugar(date,time,blood_glucose);
db4.collection("users").document(uid).collection("Measurements").add(answer);
现在,您可以查询用户的测量值,例如获取日期范围内的所有测量值,或在特定时间间隔内找到更高的值。