java - Firebase 支持添加不存在的 id
问题描述
当我尝试为我的likes
firebase 节点中不存在 id 的电影加注星标时遇到问题。这是我的代码:
private void onStarClicked(long releaseId, final String uid) {
final DatabaseReference postRef = ((GamePageActivity)getActivity()).mDatabaseRef.child("likes").child(mRegion).child(String.valueOf(releaseId));
postRef.runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData mutableData) {
_Post p = mutableData.getValue(_Post.class);
if (p == null) {
Log.d(TAG, "Transaction success");
return Transaction.success(mutableData);
}
if (p.stars.containsKey(uid)) {
// Unstar the post and remove self from stars
p.starCount = p.starCount - 1;
p.stars.remove(uid);
} else {
// Star the post and add self to stars
p.starCount = p.starCount + 1;
p.stars.put(uid, true);
}
// Set value and report transaction success
mutableData.setValue(p);
return Transaction.success(mutableData);
}
@Override
public void onComplete(DatabaseError databaseError, boolean b,
DataSnapshot dataSnapshot) {
// Transaction completed
Log.d(TAG, "postTransaction:onComplete:" + databaseError);
}
});
}
问题是如果数据库中不存在我的 id “releaseId”,则不会添加星号,我认为我的代码应该先添加“releaseId”,如果它不存在?
解决方案
在“喜欢”交易期间尝试在您的喜欢路径中添加电影似乎有点复杂。理想情况下,它已经存在了。因此,将电影添加到 likes 路径会更容易,然后使用云函数 onCreate 或 onUpdate。
我假设您在数据库中的其他地方有您的电影数据。我们暂时称其为“电影”路径。尝试的一个想法是拥有一个监视您的“电影”路径的云函数,当添加电影时,该函数会将电影数据添加到您的“喜欢”路径中。这样,一旦用户尝试喜欢一部电影,它的信息就已经在数据库中的正确位置。修复'releaseId'不存在的问题。
如果您不想使用云函数,可以考虑在添加电影时直接从客户端写入“电影”路径和“喜欢”路径,以完成相同的操作。
推荐阅读
- alexa - 如何处理失败的技能事件?
- docker - 来自移动客户端的 Docker 环境连接中的 Jitsi 服务器
- javascript - 在应用程序初始化时检查本地存储的 Angular 6 问题
- database - RabbitMQ 内存使用
- java - 如何将 git 集成到 Windows 应用程序中
- python - 通过字母逐渐增加字母
- docker - 构建 docker 镜像,使用构建的镜像 id 标记,推送镜像
- qt - 使用 QWebEngineView 显示 QCH 文件的内容
- react-native - React Native 为什么要加载来自另一个应用程序的 app.js?
- typescript - vscode中奇怪的打字稿Object.values问题