не может удалить ссылку на пожарный магазин в пакете - PullRequest
0 голосов
/ 27 марта 2019

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

Приложение Android запускается в анонимном режиме, когда пользователь решает зарегистрироваться, я пытаюсь переместить его записи новому пользователю, прошедшему проверку подлинности по SMS. Перед регистрацией я получаю все записи пользователей, используя listRef.get () и прослушиватель Success. Я чем сохраняю приведенный QuerySnapshot. После успешной аутентификации по SMS я использую снимок для копирования и удаления.

Я использую snapshot.getReference (), чтобы найти запись. Я подтвердил, что в режиме отладки правильный путь ссылки

Чтобы убедиться, что код удаления работает, я создал тестовый метод, и он сработал.
Путь в firestore: списки / пользователи / uid /

private void retrieveDataBeforeVerify() {
        CollectionReference listRef = db.collection( "lists" ).document("users").
                collection( mCurrentUser.getUid() );

        listRef.get()
                .addOnSuccessListener( new OnSuccessListener<QuerySnapshot>() {
                    @Override
                    public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
                        mQuerySnapshot = queryDocumentSnapshots; //Save snapshort
                        startPhoneNumberVerification(mPhoneNumberField.getText().toString()); //Start auth
                    }
                } );
    }
}

После смс-аутентификации

private void moveDataToNewUser() {

    if (mQuerySnapshot != null) {
        if (mCurrentUser != null) {
            DocumentReference listRef = db.collection( "lists" ).document( "users" );

            WriteBatch batch = db.batch();

            for (QueryDocumentSnapshot documentSnapshot : mQuerySnapshot) {
                Main main = documentSnapshot.toObject( Main.class );
                batch.set(   listRef.collection( mCurrentUser.getUid() ).document( ) , main); //Copy working correctly
                DocumentReference reference = documentSnapshot.getReference(); //On debug, reference shows correct path
                batch.delete( reference ); //Delete does not work
            }

            batch.commit().addOnFailureListener( new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Log.e( TAG, "moveDataToNewUser: batch failed" );
                }
            } ).addOnSuccessListener( new OnSuccessListener<Void>() {
                @Override
                public void onSuccess(Void aVoid) {
                    Log.d( TAG, "moveDataToNewUser: batch success" );
                }
            } );

        } 
    }

}

обновление

Я изменил ссылку на что-то несуществующее, но слушатель onSuccess все еще срабатывает. Как это может быть ??

DocumentReference reference = documentSnapshot.getReference().collection( "22" ).document("123");

обновление

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

кстати - я использую com.google.firebase: firebase-firestore: 18.2.0, я считаю, что это самая последняя версия

for (QueryDocumentSnapshot documentSnapshot : mQuerySnapshot) {
                    //Main main = documentSnapshot.toObject( Main.class );
                    //batch.set(   listRef.collection( mCurrentUser.getUid() ).document( ) , main); //Copy working correctly
                    DocumentReference reference = documentSnapshot.getReference(); //On debug, reference shows correct path
                    batch.delete( reference ); //Delete success!
                }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...