我正在尝试使用POJO更新文档中的特定字段,如doc中所述。我可以使用SetOptions.mergeFields()
。但它正在使用null更新其他字段,而不是保持其他字段(从mergeFields中排除)不变。这是打算吗?
这是我的代码:
UserModel userModel = new UserModel();
userModel.setStatus(0);
setTask = documentReferenceToUse.set(userModel, SetOptions.mergeFields("status"));
setTask.addOnSuccessListener(new OnSuccessListener<Void>()
{
@Override
public void onSuccess(Void aVoid)
{
if (!emitter.isDisposed())
{
emitter.onComplete();
}
}
}).addOnFailureListener(new OnFailureListener()
{
@Override
public void onFailure(@NonNull Exception e)
{
if (!emitter.isDisposed())
{
emitter.onError(e);
}
}
});
[解决] 原来这个问题来自我的Firebase封装代码。因此Firebase SDL方面没有实际问题。
答案 0 :(得分:1)
编辑:仔细查看代码后,我发现您需要更改此行代码:
setTask = documentReferenceToUse.set(model, SetOptions.mergeFields("status"));
使用:
setTask = documentReferenceToUse.set(userModel, SetOptions.mergeFields("status"));
您作为第一个参数传递,而不是您刚创建的对象而是另一个。因此,必须使用的正确对象是:userModel
。
您还可以通过从数据库中获取整个对象来使用其他方法。拥有该对象后,您可以使用setter来更改其下面的fileds的值。使用setter后,可以直接在引用上使用set()
方法将对象添加到数据库中。
documentReferenceToUse.set(userModelFromDatabase);
您还可以使用Map
进行更新:
Map<String, Object> map = new HashMap<>();
map.put("status", 0);
documentReferenceToUse.update(map);