Если вы попытаетесь использовать Firestore из нескольких процессов, это должно привести к ошибке (говоря: «Не удалось получить эксклюзивную блокировку для автономной персистентности клиента Firestore. Обычно это означает, что вы используете Firestore из нескольких процессов в вашем приложении ...»). Если вы видите что-то другое, не могли бы вы сообщить мне (и в идеале предоставить пример кода)?

ющая ошибка доставляет мне трудности. Я пытаюсь обновить одно поле в документе, хранящемся в моем проекте Firestore.

    E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.RuntimeException: Internal error in Firestore (0.6.6-dev).
  at com.google.android.gms.internal.zzejs.run(Unknown Source)
  at android.os.Handler.handleCallback(Handler.java:725)
  at android.os.Handler.dispatchMessage(Handler.java:92)
  at android.os.Looper.loop(Looper.java:176)
  at android.app.ActivityThread.main(ActivityThread.java:5365)
  at java.lang.reflect.Method.invokeNative(Native Method)
  at java.lang.reflect.Method.invoke(Method.java:511)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
  at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalStateException: Cannot perform this operation because there is no current transaction.
  at android.database.sqlite.SQLiteSession.throwIfNoTransaction(SQLiteSession.java:926)
  at android.database.sqlite.SQLiteSession.endTransaction(SQLiteSession.java:398)
  at android.database.sqlite.SQLiteDatabase.endTransaction(SQLiteDatabase.java:524)
  at com.google.android.gms.internal.zzefi.zzb(Unknown Source)
  at com.google.android.gms.internal.zzedu.zzcao(Unknown Source)
  at com.google.android.gms.internal.zzedu.start(Unknown Source)
  at com.google.android.gms.internal.zzeca.zza(Unknown Source)
  at com.google.android.gms.internal.zzecc.run(Unknown Source)
  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:390)
  at java.util.concurrent.FutureTask.run(FutureTask.java:234)
  at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:153)
  at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:267)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
  at com.google.android.gms.internal.zzejp$zza.run(Unknown Source)
  at java.lang.Thread.run(Thread.java:856)

Вот мой код:

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

if(user == null){
    Log.e(LOGTAG, "Could not upload because user is not logged in.");
    return;
}

FirebaseFirestore db = FirebaseFirestore.getInstance();
DocumentReference userRef = db.collection("users").document(user.getUid());

TextInputEditText textview = findViewById(R.id.edit_text_foo);
String enteredText = textview.getText().toString(); //implements CharSequence, thus toString() gives the correct string
userRef.update("field_foo", enteredText)
        .addOnSuccessListener(new OnSuccessListener<Void>() {
            @Override
            public void onSuccess(Void aVoid) {
                Log.i(LOGTAG, "Text successfully updated!");
            }
        })
        .addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Log.w(TAG, "Error updating text", e);
            }
        });

Ошибка возникает каждый раз, когда метод выполняется. Имхо, фраза «внутренняя ошибка» может указывать на то, что это действительно проблема, связанная с ранним бета-статусом базы данных Firestore. Тем не менее, это мое первое приложение для Android, и я также новичок в Firebase, поэтому приветствуется любая квалифицированная оценка, любая идея для решения или любой указатель на глупую ошибку новичка.

Заранее спасибо DanD

 Sam Stern11 окт. 2017 г., 02:43
Дэн, это не похоже на то, что ты делаешь. Можете ли вы попробовать очистить данные вашего приложения, а затем повторить попытку?
 Sam Stern11 окт. 2017 г., 04:53
Я только что понял - документ, который вы пытаетесь обновить, существует? Если нет, не могли бы вы попробовать использовать вызов set ()? В любом случае я не ожидал бы внутреннего утверждения, но я хочу сузить причину.

Ответы на вопрос(2)

когда вы инициализируете объект Firestore несколько раз во многих процессах. Таким образом, вместо того, чтобы объявлять это снова и снова, объявите это глобально и используйте соответственно.

 Michael Lehenbauer05 янв. 2018 г., 17:45
Если вы попытаетесь использовать Firestore из нескольких процессов, это должно привести к ошибке (говоря: «Не удалось получить эксклюзивную блокировку для автономной персистентности клиента Firestore. Обычно это означает, что вы используете Firestore из нескольких процессов в вашем приложении ...»). Если вы видите что-то другое, не могли бы вы сообщить мне (и в идеале предоставить пример кода)?
Решение Вопроса

это работает сейчас. Решение так просто, как может быть:

Очистите данные в диспетчере приложений на устройстве.

Затем снова запустите приложение.

 Francisco Durdin Garcia18 апр. 2018 г., 19:14
SQLite может быть поврежден после попытки выполнить некоторые операции, для которых требуется 100% интернет, например транзакции. Если вы попытаетесь совершить транзакцию без интернета, приложение будет постоянно в цикле. вместе с «запросом» на базу данных. Держите это под контролем, чтобы избежать этих проблем
 Sam Stern11 окт. 2017 г., 17:17
Для всех, кто читает это, похоже, что база данных SQLite как-то повреждена. Если кто-то еще может воспроизвести это, пожалуйста, свяжитесь со мной.
 yashthakkar117321 окт. 2018 г., 14:15
Выше решение не работает для меня
 inder30 окт. 2017 г., 08:06
Очистка данных в диспетчере приложений не подходит для реальных клиентов. Как мы можем это исправить программно?
 Robust08 июн. 2018 г., 18:12
Привет @SamStern, я исключил это исключение столько раз. Я добавляю Firestore в приложение, функция, связанная с Firestore, просто получает / устанавливает для 2 документов uuid в 2 коллекциях (user & userdata) и добавляю только одного прослушивателя в реальном времени. Затем подключитесь к Интернету через данные и Wi-Fi, откройте приложение -> оставьте его на заднем плане -> подождите 10 - 15 минут -> отключите Wi-Fi => Возникло исключение

Ваш ответ на вопрос