2017-12-29 48 views
-1

처음으로 Android 용 Google Tasks API를 사용하여 Tasks.whenAllComplete 또는 .whenAllSuccess() 및 OnCompleteListener 또는 OnSuccessListener를 사용하여이 문제를 해결했습니다. 작업 오류가 발생합니다. 작업 task.isComplete()를 확인해도 아직 완료되지 않고 true를 반환합니다. 여기에 무슨 일이 일어날 지 아무 생각 없어?Firestore 작업 whenallcomplete() - 작업이 아직 완료되지 않았습니다.

E/AndroidRuntime: FATAL EXCEPTION: main 
       Process: com.tripjoe.tripjoe, PID: 6161 
       java.lang.IllegalStateException: Task is not yet complete 
        at com.google.android.gms.common.internal.zzbq.zza(Unknown Source:8) 
        at com.google.android.gms.tasks.zzn.zzbjk(Unknown Source:5) 
        at com.google.android.gms.tasks.zzn.getResult(Unknown Source:3) 
        at com.tripjoe.tripjoe.services.Wizard$4.onSuccess(Wizard.java:74) 
        at com.tripjoe.tripjoe.services.Wizard$4.onSuccess(Wizard.java:71) 
        at com.google.android.gms.tasks.zzj.run(Unknown Source:27) 
        at android.os.Handler.handleCallback(Handler.java:789) 
        at android.os.Handler.dispatchMessage(Handler.java:98) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6541) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 

답변

1

아야, 내 상처를 그 제네릭 :

db.collection("calendar").get() 
    .continueWith(new Continuation<Task<QuerySnapshot>, Task<?>>() { 
     @Override 
     public Task<?> then(@NonNull Task<Task<QuerySnapshot>> task) throws Exception { 
      List<Task<QuerySnapshot>> tasks = new ArrayList<Task<QuerySnapshot>>(); 
      for (DocumentSnapshot ds : task.getResult().getResult()) 
       tasks.add(ds.getReference().collection("thingstodo").get()); 

      return Tasks.whenAllSuccess(tasks); 
     } 
    }) 
    .addOnCompleteListener(new OnCompleteListener<Task<?>>() { 
     @Override 
     public void onComplete(@NonNull Task<Task<?>> task) { 
      List<QuerySnapshot> lists = (ArrayList<QuerySnapshot>)task.getResult().getResult(); //error in this line 
      for (QuerySnapshot qs : lists) 
       for (DocumentSnapshot ds: qs) { 
        ScheduledItem item = ds.toObject(ScheduledItem.class); 
        //add to list including day 
        itemsList.add(item); 

       } 

      //list ready to be used! 
     } 
    }); 

는 오류입니다. continueWithTask을 사용하려고합니다.

FirebaseFirestore.getInstance().collection("calendar").get() 
     .continueWithTask(new Continuation<QuerySnapshot, Task<List<QuerySnapshot>>>() { 
      @Override 
      public Task<List<QuerySnapshot>> then(@NonNull Task<QuerySnapshot> task) { 
       List<Task<QuerySnapshot>> tasks = new ArrayList<Task<QuerySnapshot>>(); 
       for (DocumentSnapshot ds : task.getResult()) { 
        tasks.add(ds.getReference().collection("thingstodo").get()); 
       } 

       return Tasks.whenAllSuccess(tasks); 
      } 
     }) 
     .addOnCompleteListener(new OnCompleteListener<List<QuerySnapshot>>() { 
      @Override 
      public void onComplete(@NonNull Task<List<QuerySnapshot>> task) { 
       // BTW, `getResult()` will throw an exception if the task fails unless you first check for `task.isSuccessful()` 
       List<QuerySnapshot> list = task.getResult(); 
       for (QuerySnapshot qs : list) { 
        for (DocumentSnapshot ds : qs) { 
         ScheduledItem item = ds.toObject(ScheduledItem.class); 
         //add to list including day 
         itemsList.add(item); 

        } 
       } 
      } 
     }); 
+0

덕분에 무리를 @SUPERCILEX : 여기에 귀하의 코드는 더 나은 제네릭 및 continueWithTask와 고정입니다! 매력처럼 일했습니다! – Marcos

+0

굉장한 소스! 그것을 upvote주는 마음? – SUPERCILEX

+0

나는 그것을했다. 그러나 나는 너무 신참이다. – Marcos