Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.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
Java Firebase upvote添加的id不';不存在_Java_Android_Firebase_Firebase Realtime Database_Transactions - Fatal编程技术网

Java Firebase upvote添加的id不';不存在

Java Firebase upvote添加的id不';不存在,java,android,firebase,firebase-realtime-database,transactions,Java,Android,Firebase,Firebase Realtime Database,Transactions,当我尝试主演一部id在我的likesfirebase节点中不存在的电影时,我遇到了一个问题。这是我的密码: private void onStarClicked(long releaseId, final String uid) { final DatabaseReference postRef = ((GamePageActivity)getActivity()).mDatabaseRef.child("likes").child(mRegion).child(String.value

当我尝试主演一部id在我的
likes
firebase节点中不存在的电影时,我遇到了一个问题。这是我的密码:

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”,如果它不存在的话?

在“like”事务中,尝试在like路径中添加电影似乎有点复杂。理想情况下,它已经存在了。因此,将电影添加到likes路径将更容易分离,然后使用云函数onCreate或onUpdate

我假设您的数据库中还有其他地方的电影数据。现在让我们称之为“电影”之路。一个可以尝试的想法是使用云函数来监视您的“电影”路径,当添加电影时,该函数会将该电影数据添加到您的“喜欢”路径。这样,一旦用户尝试喜欢一部电影,它的信息就已经在数据库中的正确位置。修复了不存在的“releaseId”的问题

如果你不想使用云函数,你可以考虑在电影添加时直接从客户端写入“电影”路径和“喜欢”路径,以完成同样的事情。