Android异步任务在Firebasequery完成之前完成

时间:2017-03-16 08:19:51

标签: android firebase android-asynctask firebase-realtime-database android-service

我想在异步任务中执行一些Firebasequery。问题是我必须调用Thread.sleep(5000);获得预期的结果列表。否则,List始终为空,因为任务结束而不等待Firebasequery的完成。 该任务从后台服务调用,并通过Task.execute()等待结果.get();

是否有可能在不调用Thread.sleep()的情况下获取异步任务结果?

     @Override
protected ArrayList<Product> doInBackground(InventoryCheckService... params) {
    this.service = params[0];
    result = new ArrayList<>();
    DatabaseReference userReference = DatabaseAdapter.getInstance().getUserReference();
    if(userReference != null){
        userReference.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                HashMap<String, Product> changedProducts = dataSnapshot.getValue(new GenericTypeIndicator<HashMap<String, Product>>() {
                });
                if(changedProducts != null){
                    Iterator<String> iterator = changedProducts.keySet().iterator();
                    String nextExpirationDate = getDateForTommorow();
                    while (iterator.hasNext()) {
                        String nextKey = iterator.next();
                        Product product = changedProducts.get(nextKey);
                        if (product.getBestBeforeDate().containsKey(nextExpirationDate)) {
                            result.add(product);
                        }
                    }
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    return result;
}

提前感谢您的帮助! :)

1 个答案:

答案 0 :(得分:0)

最后我解决了我的问题。我想在Taskexecution之后提出意图。我不是从服务中启动Intent,而是将Code放入异步Task:

<RadioGroup
              android:id="@+id/rg_gender"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="horizontal">
                 <RadioButton
                      android:id="@+id/rb_male"
                      android:gravity="center"
                      android:text="@string/male"
                      android:textColor="@color/col_white"
                      android:textSize="16dp" />
                  <RadioButton
                      android:id="@+id/rb_female"
                      android:text="@string/female"
                      android:textColor="@color/col_white"
                      android:textSize="16dp" />
         </RadioGroup>

现在我不必睡觉直到任务完成,因为它是启动意图的任务的一部分。