2017-10-10 5 views
2

다음 오류로 인해 어려움을 겪고 있습니다. Firestore 프로젝트에 저장된 문서의 단일 필드를 업데이트하려고합니다.문서를 업데이트하려고 할 때 Firestore (0.6.6-dev)의 내부 오류

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

오류가 매번 메소드가 실행됩니다 발생

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) 

여기 내 코드입니다. Imho, "내부 오류"구는 이것이 실제로 Firestore 데이터베이스의 초기 베타 상태와 관련된 문제임을 나타낼 수 있습니다. 그러나 이것은 내 첫 번째 안드로이드 응용 프로그램이며 Firebase을 처음 접했기 때문에 자격을 갖춘 평가, 솔루션에 대한 아이디어 또는 바보 같은 newbe 실수에 대한 포인터를 환영합니다. 사전에

감사합니다, @hatboysam에

+0

댄 이것은 당신이하는 일의 잘못이 아닌 것 같습니다. 앱의 데이터를 삭제 한 다음 다시 시도 할 수 있습니까? –

+0

방금 ​​깨달은 것 - 업데이트하려는 문서가 아직 존재합니까? 그렇지 않다면 set() 호출을 대신 사용할 수 있습니까? 두 경우 모두 내부 주장을 기대하지는 않지만 그 원인을 좁히고 싶습니다. –

답변

2

감사 DAND, 그것은 작동합니다. 해결책은 간단합니다 :

장치의 응용 프로그램 관리자에서 데이터를 지 웁니다.

그런 다음 앱을 다시 실행하십시오.

+0

다른 사람이 이것을 읽고, SQLite 데이터베이스가 어떻게 든 손상된 것 같습니다. 다른 사람이 이것을 재현 할 수 있다면 나에게 연락하십시오. –

+0

응용 프로그램 관리자에서 데이터 지우기는 실제 클라이언트에서 실행 가능한 옵션이 아닙니다. 프로그래밍 방식으로 어떻게 수정합니까? – inder

0

이 문제는 많은 프로세스에서 Firestore 개체를 여러 번 초기화 할 때 발생합니다. 따라서 그것을 반복해서 선언하는 대신에 그것을 세계적으로 선언하고 그에 따라 사용하십시오.

+0

여러 프로세스에서 Firestore를 사용하려고하면 "Firestore 클라이언트의 오프라인 지속성에 대한 독점적 인 잠금을 얻지 못했습니다. 일반적으로 앱의 여러 프로세스에서 Firestore를 사용 중입니다 ..."라는 오류 메시지가 나타납니다. . 당신이 다른 것을보고 있다면, 알려 주시고 (이상적으로 샘플 코드를 제공해 주시겠습니까?) –