从Firebase FireStore检索数据后更新Android ArrayList

时间:2019-01-26 19:56:25

标签: android firebase arraylist google-cloud-firestore

我已将Firebase Firestore实现到我的android应用程序中,并且可以正常检索数据。

执行计算以汇总存储在Firestore中的值。

但是,我相信在设计代码的方式上,可能会受到限制。

我已经从Firestore检索了数据并将其存储到ArrayList中。因此,我已经看到,当最初从Firestore填充ArrayList时,任何新数据都不会更新ArrayList。

我当时正在考虑实现一个刷新按钮或一张幻灯片来刷新,但不太确定该怎么做。

两个求和部分的代码相同,并将其值设置到textview中。

personTextView = v.findViewById(R.id.personSumValue);
    final ArrayList<UserPaymentModel> personArrayList = new ArrayList<>();
    db.collection("userspayment").get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
        @Override
        public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
            if (queryDocumentSnapshots.isEmpty()) {
                Log.d(TAG, "onSuccess: LIST EMPTY");
                return;
            } else {
                List<UserPaymentModel> types = queryDocumentSnapshots.toObjects(UserPaymentModel.class);

                // Add all to your list
                personArrayList.addAll(types);

                //Log.d(TAG, "onSuccess: " + mArrayList.get(2).getAmount());
                double sum = 0;
                for (UserPaymentModel u : personArrayList) {
                    if (u.getName().equals("Person1")) {
                        sum += Double.valueOf(u.getAmount());
                    }
                }
                Log.d(TAG, "onSuccess: " + sum);
                personSumTextView.setText(String.valueOf(sum));
            }
        }
    });

enter image description here

基本上有4个值,根据特定条件将2个值相加将得出不同的值。如果添加新值,则将更新recyclerview,但是在关闭并重新打开应用程序之前,屏幕上半部分显示的总和不会更新。

1 个答案:

答案 0 :(得分:0)

如果您想在每次在Firestore集合中添加内容时更新值,则需要使用SnapshotListener而不是仅获取一次值。

为此,您需要将db.collection("userspayment").get()替换为db.collection("userspayment").addSnapshotListener(EventListener)。您可以在文档中找到更多详细信息:Get realtime updates with Cloud Firestore

通过此实现,无需添加刷新,因为数据将实时显示。您所需要做的就是使用notifyDataSetChanged()

通知适配器数据已更改。