如何在Firebase身份验证中的单个用户上记录许多数据?

时间:2019-11-18 13:16:50

标签: android firebase google-cloud-firestore

我打算为自己的论文配备一个监控应用程序,我希望每天计划记录许多数据,而每天都在使用该日期和时间进行记录。它在我的仪表板上,我希望它看起来像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));
                }
            }
        });
    }

1 个答案:

答案 0 :(得分:0)

您在这里有两个主要选择:

  1. 您可以在一个文档中记录用户的所有度量。这样做的好处是您只需要读/写一个文档。缺点是您将始终必须阅读整个文档(随着时间的流逝,它可能会变得很大),您无法查询特定的值,并且文档的最大大小为1MB。

  2. 您可以在该用户的个人资料下的子集合中记录该用户的每个度量。在这种情况下的优缺点与以前的方法相反。 :)


将所有度量存储在一个文档中,您需要将每个度量添加到文档中。您当前的文档将覆盖文档中的现有值,但是您可以使用以下类似的方法轻松地将它们与现有数据合并:

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);

现在,您可以查询用户的测量值,例如获取日期范围内的所有测量值,或在特定时间间隔内找到更高的值。