Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 尝试更新文档时Firestore(0.6.6-dev)中出现内部错误_Android_Google Cloud Firestore - Fatal编程技术网

Android 尝试更新文档时Firestore(0.6.6-dev)中出现内部错误

Android 尝试更新文档时Firestore(0.6.6-dev)中出现内部错误,android,google-cloud-firestore,Android,Google Cloud 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.handleCa

下面的错误让我很难过。我正在尝试更新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);
            }
        });
FirebaseUser user=FirebaseAuth.getInstance().getCurrentUser();
if(user==null){
Log.e(LOGTAG,“由于用户未登录,无法上载”);
返回;
}
FirebaseFirestore db=FirebaseFirestore.getInstance();
DocumentReference userRef=db.collection(“用户”).document(user.getUid());
textInputItemText textview=findViewById(R.id.edit\u text\u foo);
字符串enteredText=textview.getText().toString()//实现CharSequence,因此toString()提供正确的字符串
userRef.update(“field\u foo”,enteredText)
.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公开作废(作废避免){
i(LOGTAG,“文本成功更新!”);
}
})
.addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
Log.w(标签“错误更新文本”,e);
}
});
每次执行该方法时都会发生错误。恕我直言,“内部错误”一词可能表明这确实是Firestore数据库早期beta测试状态带来的问题。然而,这是我的第一个android应用程序,我也是Firebase的新手,所以任何合格的估价、任何解决方案的想法或任何指向愚蠢的新手错误的指针都是受欢迎的

提前感谢,,
DanD

多亏了@hatboysam,它现在可以工作了。 解决方案尽可能简单:

清除设备上应用程序管理器中的数据。


然后再次运行应用程序。

当您在许多进程中多次初始化Firestore对象时,会出现此问题。因此,与其一次又一次地声明它,不如全局声明并相应地使用它。

Dan这似乎不是您所做的任何事情的错。你能尝试清除应用程序的数据然后再试一次吗?我刚刚意识到-你要更新的文档是否存在?如果不是,您可以尝试使用set()调用吗?在这两种情况下,我都不希望出现内部断言,但我想缩小原因。对于其他阅读本文的人来说,SQLite数据库似乎不知何故被破坏了。如果其他人可以复制此内容,请联系我。对于真正的客户来说,在应用程序管理器中清除数据不是一个可行的选择。我们如何以编程方式解决这个问题?在尝试执行某些需要100%internet的操作(如事务)后,SQLite可能会损坏。如果您尝试在没有internet的情况下进行交易,应用程序将永远处于循环中。与数据库上的“请求”一起。控制它以避免这个问题Shey@SamStern,我多次遇到这个异常。我将Firestore添加到应用程序中,Firestore的相关功能只是在2个集合(用户和用户数据)中的2个uuid文档上获取/设置,并且只添加一个实时侦听器。然后通过数据和wifi连接到互联网,打开应用程序->将其置于后台->等待10-15分钟->断开wifi=>异常发生如果您尝试从多个进程使用Firestore,它会给您一个错误(如“未能获得Firestore客户端脱机持久性的独占锁定。这通常意味着您正在应用程序中的多个进程中使用Firestore…”。如果您看到不同的情况,请告诉我(最好提供示例代码)?