我已将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));
}
}
});
基本上有4个值,根据特定条件将2个值相加将得出不同的值。如果添加新值,则将更新recyclerview,但是在关闭并重新打开应用程序之前,屏幕上半部分显示的总和不会更新。
答案 0 :(得分:0)
如果您想在每次在Firestore集合中添加内容时更新值,则需要使用SnapshotListener
而不是仅获取一次值。
为此,您需要将db.collection("userspayment").get()
替换为db.collection("userspayment").addSnapshotListener(EventListener)
。您可以在文档中找到更多详细信息:Get realtime updates with Cloud Firestore
通过此实现,无需添加刷新,因为数据将实时显示。您所需要做的就是使用notifyDataSetChanged()