2016-04-18 55 views
0

我的日誌可以打印全部Exercise對象。但是我打電話時listExercise爲空。有什麼問題?無法從Android上的Firebase獲取列表大小

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); 
     } 
+0

你得到一些錯誤堆棧跟蹤? – jDur

+0

不,它只是在我登錄時返回一個空列表: Log.d(「LISTSIZE:」,String.valueOf(listExercises.size())); – kidsoul

+0

在插入練習之前,您可能正在檢查列表。注意這是異步工作的。將「LISTSIZE」的日誌放在listExercises.add(練習)後面; – jDur

回答

3

當方法「paintListInScreen」之稱,你知道肯定列表有一些內容(或者也許不是,那要看在服務器上,但你與線程一致)。

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); 
     } 
     Log.d("LISTSIZE: ", String.valueOf(listExercises.size())); // return 0 
     paintListInScreen(listExercises); 
    } 

    @Override 
    public void onCancelled(FirebaseError firebaseError) { 
     Log.d("The read failed: ", firebaseError.getMessage()); 
    } 
}); 
+0

謝謝我會試試 – kidsoul

+0

你是對的,jDur。在我嘗試之後,我發現它有兩點可以使用我得到的數據: 首先,它是onDataChange方法之後的時間。第二,當你在同步數據之後做一些動作時,也許它是onClick按鈕...等等。 – kidsoul

+0

歡迎您:)。如果您認爲這是一個正確的答案,請將其標記爲正確,以便其他用戶可以找到有用的答案。 – jDur

0

對於Java 8和新versons(對於Android的API等級24是必需的):

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

對於舊版本:

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