firebase事务中的意外字段更改

时间:2017-11-06 21:52:59

标签: android firebase firebase-realtime-database

我通过firebase事务在某些但不是所有数据字段中获得了一个奇怪的更新。

我有一个火种风格的应用程序,我只看看将来有日期的“帖子”。我可以在我的数据库中看到我的测试帖在将来有一个日期并在应用程序中打开。如果日期是过去的,则不会按预期打开。我的问题是,在我执行滑动,触发下面的代码后,日期字段似乎更新为半随机日期,这不是我的计算机或设备上的日期,但始终是某个月的第28天。据我所知,下面的代码不应该更新日期,但即使是日志语句也显示已更新的日期

public void swipeReject(String postId) {
        getPostRef(postId);
        onSwiped(globalPostRef, FALSE);
    }

    private void getPostRef(String postId){
        mFirebaseDatabaseReference = FirebaseDatabase.getInstance().getReference();
        globalPostRef = mFirebaseDatabaseReference.child("messages").child(postId);
    }

    private void onSwiped(DatabaseReference postRef, Boolean accepted) {
        final Boolean accept = accepted;
        postRef.runTransaction(new Transaction.Handler() {
            @Override
            public Transaction.Result doTransaction(MutableData mutableData) {
                PostMessage p = mutableData.getValue(PostMessage.class);
                if (p == null) {
                    return Transaction.success(mutableData);
                }

                Log.e("date", String.valueOf(p.getDate()));

                if (p.votes.containsKey(mFirebaseUser.getUid())) {
                    // This shouldn't happen

                } else {
                    if (accept){
                        p.votes.put(mFirebaseUser.getUid(), "upvote");
                        p.upVoteCount = p.upVoteCount + 1;
                    }else{
                        p.votes.put(mFirebaseUser.getUid(), "downvote");
                        p.downVoteCount = p.downVoteCount + 1;
                    }
                }

                // 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
                if (databaseError != null){
                    Log.e(TAG, "postTransaction:onComplete:" + databaseError);
                }
            }
        });
之前的

代码只是在没有写入操作的情况下从数据库中读取数据。我不知道这个字段正在更新?

我可以做些什么来调试这个?

1 个答案:

答案 0 :(得分:0)

原来我的代码没有任何问题。错误发生在我的db值中。虽然Epoch以来的毫秒是正确的,但还有另一个日期字段记录了不正确的年份。一旦更新,一切都有意义。