无法从Android上的Firebase获取列表大小

时间:2016-04-18 08:45:54

标签: android firebase firebase-realtime-database

我的日志可以打印所有Exercise个对象。但是当我打电话时,listExercise为空。问题是什么?

ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
            for (DataSnapshot postSnapshot : snapshot.getChildren()) {
                Exercise exercise = postSnapshot.getValue(Exercise.class);
                String temp = exercise.toString();
                Log.d("exercise: ", temp + "\n"); // can log all
                listExercises.add(exercise);
            }
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {
            Log.d("The read failed: ", firebaseError.getMessage());
        }
    });
Log.d("LISTSIZE: ", String.valueOf(listExercises.size())); // return 0

[更新]任何人都需要答案:

@Override
        public void onDataChange(DataSnapshot snapshot) {
            for (DataSnapshot postSnapshot : snapshot.getChildren()) {
                Exercise exercise = postSnapshot.getValue(Exercise.class);
                listExercises.add(exercise);
            }
            // action with data here
            Exercise ex = listExercises.get(0);
            tvQuestion.setText(ex.getQuestion);
        }

3 个答案:

答案 0 :(得分:3)

当方法" paintListInScreen"被调用,你知道列表中有一些内容(或者可能不是,这取决于服务器,但你与线程一致)。

{{1}}

答案 1 :(得分:0)

对于Java 8及更新的版本(需要Android API Level 24):

int size = dataSnapshot.getChildren().spliterator().getExactSizeIfKnown() ;

旧版本:

int size = 0 
for (DataSnapshot postSnapshot : snapshot.getChildren()) {
    size++ ;
}

答案 2 :(得分:0)

要获取datasnapshot对象的大小:

dataSnapshot.getChildrenCount();