首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于成功的Firebase android Task<T>不返回任何东西

基于成功的Firebase android Task<T>不返回任何东西
EN

Stack Overflow用户
提问于 2018-08-03 03:39:14
回答 1查看 714关注 0票数 1

我正在尝试将我的基本数据读入事件列表中。由于值事件侦听器的触发是异步的,所以我试图封装在此任务中返回的列表。

代码语言:javascript
复制
Task<List<Event>> task = Tasks.call(new ReturnEventList(mDatabaseRef.child("Events")));
    task.addOnSuccessListener(new OnSuccessListener<List<Event>>() {
        @Override
        public void onSuccess(List<Event> events) {
            Log.i(TAG,"size " + events.size());
            for (Event event : events) {
                Log.i(TAG,event.toString());
            }
        }
    });

ReturnEventList:

代码语言:javascript
复制
class ReturnEventList implements Callable<List<Event>> {

private static final String TAG = "ReturnEventList";

DatabaseReference mDatabaseRef;

public ReturnEventList(DatabaseReference mDatabaseReference) {
    this.mDatabaseRef = mDatabaseReference;
}

@Override
public List<Event> call() throws Exception {
    List<Event> events = new ArrayList<>();
    mDatabaseRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Log.i(TAG,dataSnapshot.toString());
            for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) {
                Log.i(TAG,childSnapshot.toString());
                Event event = childSnapshot.getValue(Event.class);
                events.add(event);
                Log.i(TAG,event.toString());
            }
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });
    return events;
}

returnEventList中的日志语句打印正确,我能够获得我想要的事件列表。但是,当我添加一个onSuccessListener时,我打印的大小返回0。名单实际上是空的。不知道这是怎么回事?

EN

回答 1

Stack Overflow用户

发布于 2018-08-03 03:53:32

addListenerForSingleValueEvent()是异步的,这意味着它会立即返回(),而它的回调将在稍后某个未知的时间被调用。您的代码目前期望它只在收到数据之后才返回,而这种情况永远不会发生。

您的代码应该进行重构,以使用异步编程,而不是假设所有代码都将按照您看到的代码行的顺序执行。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51664976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档