Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Firebase脱机数据不一致 数据库结构 { “地点”:{ "": { “名称”:“X公司” }, "": { “名称”:“Y餐厅” } } “用户”:{ "": { “姓名”:“哈里” } }, “用户位置”:{ "": { "": { “名称”:“X公司” } } } } 问题:_Android_Swift_Firebase_Firebase Realtime Database_Nosql - Fatal编程技术网

Android Firebase脱机数据不一致 数据库结构 { “地点”:{ "": { “名称”:“X公司” }, "": { “名称”:“Y餐厅” } } “用户”:{ "": { “姓名”:“哈里” } }, “用户位置”:{ "": { "": { “名称”:“X公司” } } } } 问题:

Android Firebase脱机数据不一致 数据库结构 { “地点”:{ "": { “名称”:“X公司” }, "": { “名称”:“Y餐厅” } } “用户”:{ "": { “姓名”:“哈里” } }, “用户位置”:{ "": { "": { “名称”:“X公司” } } } } 问题:,android,swift,firebase,firebase-realtime-database,nosql,Android,Swift,Firebase,Firebase Realtime Database,Nosql,我们正在开发一个应用程序,用户可以在其中向其帐户添加位置。我们已经对数据库进行了非规范化。这样我们就有了更快的读取请求(以及更容易的过滤和排序)。但是现在我们遇到了一个问题,当用户脱机工作时,他们可以将缓存的位置添加到他们的帐户中 但是,如果在用户脱机时更改了位置的名称,则缓存版本和实时版本将不再同步。发生的情况是,应用程序使用旧的地点数据将地点写入userPlaces节点 这会导致数据不一致。这个问题有解决办法吗 编辑 DatabaseReference=FirebaseDatabase.ge

我们正在开发一个应用程序,用户可以在其中向其帐户添加位置。我们已经对数据库进行了非规范化。这样我们就有了更快的读取请求(以及更容易的过滤和排序)。但是现在我们遇到了一个问题,当用户脱机工作时,他们可以将缓存的位置添加到他们的帐户中

但是,如果在用户脱机时更改了位置的名称,则缓存版本和实时版本将不再同步。发生的情况是,应用程序使用旧的地点数据将地点写入userPlaces节点

这会导致数据不一致。这个问题有解决办法吗

编辑
DatabaseReference=FirebaseDatabase.getInstance().getReference();
映射更新=新的HashMap();
update.put(“userPlaces/”+userId+“/”+mPlace.getKey(),place);
update.put(“placeUsers/”+mPlace.getKey()+“/”+userId,user);
参考。更新儿童(更新);

数据将提供给firebase。firebase在线时会更新这些值。

这取决于您如何同步数据。请(对于此问题和以后的问题)共享。我添加了一个小代码段。如果您想知道当两个客户端更新同一位置时发生了什么,并且更新发生冲突,那么最后一次写入将获胜。如果您想要更多的控制,请使用事务。但事务无法在应用程序重新启动后生存,因此限制了您可以使用它们。我也遇到了同样的问题,您是否设法解决了它?我们使用了一种结构,其中userPlaces和placeUsers不包含place对象,而只包含密钥。所以基本上我们选择了不复制数据。
 {
    "places": {
        "<push-key>": {
            "name": "Company X"
        },
        "<push-key>": {
            "name": "Restaurant Y"
        }
    }
    "users": {
        "<push-key>": {
            "name": "Harry"
        }
    },
    "userPlaces": {
        "<user-push-key>": {
            "<place-push-key>": {
                "name": "Company X"
            }
        }
    }
}
DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
Map<String, Object> update = new HashMap<>();
update.put("userPlaces/" + userId + "/" + mPlace.getKey(), place);
update.put("placeUsers/" + mPlace.getKey() + "/" + userId, user);
reference.updateChildren(update);