android - 如何在事务Firestore后读取对象?

标签 android firebase transactions google-cloud-firestore

如何在事务Firestore之后读取对象“数据”?为什么要为快照创建这个对象?如何将快照直接复制到文档中或如何读取对象“数据”?

enter image description here

交易:

mFirestoreRef = mFirestore.collection("item_decor").document(item_holly_id);
builder.setView(v)
    .setTitle("Добавить элемент")
    .setPositiveButton("Добавить", (dialog, which) ->
        mFirestore.runTransaction((Transaction.Function<Void>) transaction -> {
            DocumentSnapshot snapshot = transaction.get(mFirestoreRef);

            long sumUpdateData = snapshot.getLong("sum");
            int sumUpdate = (Integer) sum.getSelectedItem();

            if(sumUpdateData >= sumUpdate) {
                transaction.update(mFirestoreRef, "sum", sumUpdateData - sumUpdate);
                DocumentReference addItemRef = mFirestore.collection("list_holly")
                    .document(holly.getSelectedItem().toString())
                    .collection("item_holly").document(snapshot.getId());

                    transaction.set(addItemRef, snapshot);
                    transaction.update(addItemRef, "sum", sumUpdate);
                }

阅读:

mFirestore.collection("list_holly").document(title.getTitle()).collection("item_holly")
    .get().addOnCompleteListener(task -> {
        if (task.isSuccessful()) {
            for (DocumentSnapshot document : task.getResult()) {
                String name = document.getString("name"); // Does not work
            }
        } else {
    }
});

最佳答案

这不起作用,因为您缺少一个属性。要解决此问题,请更改您的 get 调用:

mFirestore.collection("list_holly")
    .document(title.getTitle())
    .collection("item_holly")
    .get().addOnCompleteListener(task -> {
        for (DocumentSnapshot document : task.getResult()) {
            Map<String, Object> data = (Map<String, Object>) document.get("data");
            for (Map.Entry<String, Object> entry : data.entrySet()) {
                if (entry.getKey().equals("name")) {
                    String name = entry.getValue().toString();
                    Log.d("TAG", name);
                }
            }
        }
    });

输出将是:Decor

data 属性是一个 Map,因此要实际获取名称,您只需迭代该 Map。就是这样!

关于android - 如何在事务Firestore后读取对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49490416/

相关文章:

firebase - Firebase托管未显示应用程序?

android - 离线模式下的 Firebase 实时数据库不一致行为

java - 如何使用 Spring HibernateOperations 进行带有隐式事务的简单操作?

android - Espresso RecyclerViewActions.actionOnItem 错误

android - 了解Android中的返回堆栈概念

ios - 如何向 firebase 中的现有节点插入新值?

php - 如何在同一事务中保存和删除

android - 在 Android 应用程序中预填充图像的最佳方法是什么?

Android 6 - 找到蓝牙设备时手机崩溃

linq-to-sql - LINQ to SQL-确实,SubmitChanges()自动启动事务吗?