2017-10-10 93 views
2

以下錯誤給我帶來了困難。我試圖更新存儲在我的Firestore項目中的文檔中的單個字段。嘗試更新文檔時Firestore(0.6.6-dev)中的內部錯誤

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); 
      } 
     }); 

每次執行該方法時發生錯誤。 Imho,「內部錯誤」短語可能表明這確實是Firestore數據庫的早期測試版狀態所帶來的問題。然而,這是我的第一個Android應用程序,我也是Firebase的新手,因此任何合格的評估,對解決方案的任何想法或任何指向愚蠢的newbe錯誤的指示都是受歡迎的。

由於提前, D鍵

+0

丹這似乎不是你正在做的任何事情的錯。你可以嘗試清除你的應用程序的數據,然後再試一次嗎? –

+0

我剛剛意識到 - 你試圖更新的文檔存在嗎?如果不是,你可以嘗試使用set()調用嗎?在任何一種情況下,我都不會期望內部斷言,但我想縮小原因。 –

回答

2

感謝@hatboysam,現在它工作。 解決方案儘可能簡單:

清除設備上應用程序管理器中的數據。

然後再次運行該應用程序。

+0

對於讀這個的人來說,似乎SQLite數據庫以某種方式被損壞了。如果有其他人可以複製此內容,請聯繫我。 –

+0

清除應用程序管理器中的數據對於真實客戶端不是可行的選項。我們如何以編程方式解決這個問題? – inder

0

當您在多個進程中多次初始化Firestore對象時,會出現此問題。因此,不要一次又一次地聲明它,請在全球範圍內聲明並相應地使用。

+0

如果你嘗試從多個進程中使用Firestore,它應該會給你一個錯誤(說「無法獲得對Firestore客戶端的離線持久性的獨佔鎖定,這通常意味着你正在使用應用中多個進程的Firestore ...」) 。如果你看到不同的東西,你可以讓我知道(最好提供示例代碼)嗎? –

相關問題