Выполнение транзакции Firestore в том же месте приводит к сбою приложения - PullRequest
0 голосов
/ 27 мая 2020

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

Код, добавленный ниже, четко показывает вызов транзакций, и транзакции настроены точно и без проблем со всеми ними проблема возникает, поскольку они должны быть вызваны в одном и том же месте.

Я также поделился журналом ошибок ниже. Пожалуйста, подскажите, что мне делать.

FlatButton(
                  child: Text("btn3"),
                  onPressed: () {
                   Transaction1().postTransaction();
                    Transaction2().postTransaction();
                  },

ЖУРНАЛ ОШИБОК

2020-05-27 18: 43: 14.529 1022-1344 / dev.jideguru.social_app_ui E / Android Время выполнения: FATAL ИСКЛЮЧЕНИЕ: AsyncTask # 4 Процесс: dev.jideguru.social_app_ui, PID: 1022 java .lang.RuntimeException: произошла ошибка при выполнении doInBackground () в android .os.AsyncTask $ 3.done (AsyncTask. java: 353) в java .util.concurrent.FutureTask.finishCompletion (FutureTask. java: 383) в java .util.concurrent.FutureTask.setException (FutureTask. java: 252) в java .util .concurrent.FutureTask.run (FutureTask. java: 271) в android .os.AsyncTask $ SerialExecutor $ 1.run (AsyncTask. java: 245) в java .util.concurrent.ThreadPoolExecutor.runWorker ( ThreadPoolExecutor. java: 1162) в java .util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor. java: 636) в java .lang.Thread.run (Thread. java: 764) Вызвано: java .lang.AssertionError: СБОЙ ВНУТРЕННЕЙ АССЕРЦИИ: объект транзакции нельзя использовать после того, как был вызван его обратный вызов обновления. на com.google.firebase.firestore.util.Assert.fail (com.google.firebase: firebase-firestore @@ 21.3.0: 46) на com.google.firebase.firestore.util.Assert.hardAssert (com.google .firebase: firebase-firestore @@ 21.3.0: 31) на com.google.firebase.firestore.core.Transaction.ensureCommitNotCalled (com.google.firebase: firebase-firestore @@ 21.3.0: 246) на com.google. .firebase.firestore.core.Transaction.lookup (com.google.firebase: firebase-firestore @@ 21.3.0: 81) по адресу com.google.firebase.firestore.Transaction.getAsyn c (com.google.firebase: firebase-firestore @@ 21.3.0: 191) на com.google.firebase.firestore.Transaction.get (com.google.firebase: firebase-firestore @@ 21.3.0: 228) на io.flutter.plugins.firebase. cloudfirestore.CloudFirestorePlugin $ 5.doInBackground (CloudFirestorePlugin. java: 613) в io.flutter.plugins.firebase.cloudfirestore.CloudFirestorePlugin $ 5.doInBackground (CloudFirestorePlugin. android: 605 *1036*: (AsyncTask. java: 333) в java .util.concurrent.FutureTask.run (FutureTask. java: 266 ) в android .os.AsyncTask $ SerialExecutor $ 1.run (AsyncTask. java: 245) в java .util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor. java: 1162) в java .util .concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor. java: 636) на java .lang.Thread.run (Thread. java: 764) 2020-05-27 18: 43: 14.529 1022-1346 / dev.jideguru.social_app_ui E / AndroidRuntime: ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: AsyncTask # 6 Процесс: dev.jideguru.social_app_ui, PID: 1022 java .lang.RuntimeException: произошла ошибка при выполнении doInBackground () на * 1049c * .os.os. $ 3.done (AsyncTask. java: 353) в java .util.concurrent.FutureTask.finishCompletion (FutureTask. java: 383) в java .util.concurrent.FutureTask.setException (FutureTask. java: 252) в java .util.concurrent.FutureTask.run (FutureTask. java: 271) в android .os.AsyncTask $ SerialExecutor $ 1.run (AsyncTask. java: 245) в java .util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor. java: 1162) в java. util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor. java: 636) в java .lang.Thread.run (Thread. java: 764) Причина: java .lang.AssertionError: ВНУТРЕННЕЕ УТВЕРЖДЕНИЕ FAILED: объект транзакции нельзя использовать после вызова его обратного вызова обновления. на com.google.firebase.firestore.util.Assert.fail (com.google.firebase: firebase-firestore @@ 21.3.0: 46) на com.google.firebase.firestore.util.Assert.hardAssert (com.google .firebase: firebase-firestore @@ 21.3.0: 31) на com.google.firebase.firestore.core.Transaction.ensureCommitNotCalled (com.google.firebase: firebase-firestore @@ 21.3.0: 246) на com.google. .firebase.firestore.core.Transaction.lookup (com.google.firebase: firebase-firestore @@ 21.3.0: 81) по адресу com.google.firebase.firestore.Transaction.getAsyn c (com.google.firebase: firebase-firestore @@ 21.3.0: 191) на com.google.firebase.firestore.Transaction.get (com.google.firebase: firebase-firestore @@ 21.3.0: 228) на io.flutter.plugins.firebase. cloudfirestore.CloudFirestorePlugin $ 5.doInBackground (CloudFirestorePlugin. java: 613) в io.flutter.plugins.firebase.cloudfirestore.CloudFirestorePlugin $ 5.doInBackground (CloudFirestorePlugin. java: 2. (AsyncTask. java: 333) в java .util.concurrent.FutureTask.run (FutureTask. java: 266 ) в android .os.AsyncTask $ SerialExecutor $ 1.run (AsyncTask. java: 245) в java .util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor. java: 1162) в java .util .concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor. java: 636) на java .lang.Thread.run (Thread. java: 764)

1 Ответ

2 голосов
/ 27 мая 2020

Попробуйте использовать метод async и ключевое слово await перед первой транзакцией, чтобы подождать перед запуском второй.

...