При использовании runTransaction я получил запрещение - PullRequest
0 голосов
/ 08 мая 2018

Я разрабатываю систему чата, подсчитываю общее количество непрочитанных.

вот мой код

        chatroomRef.child(chatInfo.getPartner_firebase_uid())
            .child(mChatId)
            .child("totalUnreadCount")
            .runTransaction(new Transaction.Handler() {
                @Override
                public Transaction.Result doTransaction(MutableData mutableData) {
                    Integer totalUnreadCount = mutableData.getValue(Integer.class);
                    if(totalUnreadCount == null){
                        mutableData.setValue(0);
                    }else{
                        mutableData.setValue(totalUnreadCount + 1);
                    }
                    return Transaction.success(mutableData);
                }

                @Override
                public void onComplete(DatabaseError databaseError, boolean b, DataSnapshot dataSnapshot) {
                    Log.d("result", "postTransaction:onComplete:" + databaseError);
                }
            });

Когда я использовал этот код, я получил отказ в разрешении. Но когда я использовал код ниже, это сработало.

chatroomRef.child(chatInfo.getPartner_firebase_uid())
                        .child(mChatId)
                        .child("totalUnreadCount")
                        .setValue(1);

данные двух кодовых наборов меняются одинаково в firebase-db. Хотя один код получает ошибку разрешения, другой нет. Так что я думаю, что это проблема с правилами Firebase. И я дал 'true' для '.write', но получил ошибку разрешения.

1 Ответ

0 голосов
/ 08 мая 2018

Похоже, у вас нет разрешения на чтение значение totalUnreadCount. Транзакция записывает новое значение на основе существующего значения, поэтому для нее требуется разрешение на чтение и запись.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...