Firebase выбрасывает исключение "java.lang.IllegalStateException: задача еще не выполнена" внутри onComplete
Здравствуйте, у меня есть ситуация здесь, у меня есть обычай FirebaseAuthLiveData
расширение класса Livedata
и реализует OnCompleteListener
, этот класс в основном выполняет всю связанную с аутентификацией работу с firebase. Я следую за архитектурой mvvm для приложения. так что я буду наблюдать за жизненными данными по активности. Теперь проблема в том, что я получаю Task Not Complete yet
Исключение, когда я пытаюсь сохранить значение Livingata в oncomplete
но когда я снова открываю приложение, оно уже вошло в систему. Я прикрепил класс, если кто-то может указать, что я делаю неправильно, версия Firebase, которую я использую, - 11.8.0
class FirebaseAuthLiveData (private val firebaseAuth: FirebaseAuth) : LiveData<Resource<FirebaseUser>>(), OnCompleteListener<AuthResult>, OnFailureListener{
override fun onFailure(p0: Exception) {
value = Resource.error(p0.localizedMessage,null)
}
override fun onComplete(p0: Task<AuthResult>) {
Log.d("firebase auth", "is task successful : "+p0.isSuccessful);
if (p0.isSuccessful) {
value = Resource.success(p0.result.user)
}
}
//this is called from a viewmodel
fun signInAnonymously( ){
firebaseAuth.signInAnonymously()
.addOnFailureListener(this)
.addOnCompleteListener(this)
}
}
и вот логкат
FATAL EXCEPTION: main
Process: com.creoit.android.withdrawalwarrior, PID: 10246
java.lang.IllegalStateException: Task is not yet complete
at com.google.android.gms.common.internal.zzbq.zza(Unknown Source)
at com.google.android.gms.tasks.zzn.zzbjk(Unknown Source)
at com.google.android.gms.tasks.zzn.getResult(Unknown Source)
at com.creoit.android.withdrawalwarrior.prior_info.PriorInfoContentActivity$signInAnonymouslyWithFirebase$1.onChanged(PriorInfoContentActivity.kt:124)
at com.creoit.android.withdrawalwarrior.prior_info.PriorInfoContentActivity$signInAnonymouslyWithFirebase$1.onChanged(PriorInfoContentActivity.kt:33)
at android.arch.lifecycle.LiveData.considerNotify(LiveData.java:131)
at android.arch.lifecycle.LiveData.dispatchingValue(LiveData.java:148)
at android.arch.lifecycle.LiveData.setValue(LiveData.java:294)
at com.creoit.android.withdrawalwarrior.firebase.livedata.FirebaseAuthLiveData.onComplete(FirebaseAuthLiveData.kt:28)
at com.google.android.gms.tasks.zzf.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5451)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
1 ответ
Положите while ((!uri.isComplete())); нравится.
reference.putFile(file).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
toast("Entered success listner");
Task<Uri> uri = taskSnapshot.getStorage().getDownloadUrl();
while ((!uri.isComplete()));
Uri url = uri.getResult();
databaseReference = FirebaseDatabase.getInstance().getReference("uploads");
PDFDoc uploadpdf = new PDFDoc(name.getText().toString(), url.toString());
databaseReference.child(databaseReference.push().getKey()).setValue(uploadpdf);
toast("Uploaded to database");
progressDialog.dismiss();
}
})
это сработало для меня:)
Проверка базы FireBase Вы дали доступ к базе FireBase для анонимного входа. Чтобы сделать это, перейдите в Firebase Authentication/Sign In Method, затем включите кнопку анонимного входа.