2015-06-20 137 views
0

這是我從Firebase獲取數據的方法,但問題是存在大量數據,這就是爲什麼它需要大量時間並且沒有返回列表。 ..從Firebase中檢索數據但無法在listView中顯示

public List<Message> retrieveDataFromDatabase() { 
    final List<Message> msg = new ArrayList<>(); 
    Firebase itemsTodo = fb.child("Incomplete"); 
    itemsTodo.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      for (DataSnapshot children : dataSnapshot.getChildren()) { 
       for (DataSnapshot child : children.getChildren()) { 
        Map<String, Object> mapMsg = (Map<String, Object>) child.getValue(); 
        boolean isRead = (Boolean) mapMsg.get("read"); 
        String message = (String) mapMsg.get("sender"); 
        String title = (String) mapMsg.get("title"); 
        msg.add(new Message(title, message, isRead)); 
       } 
      } 
     } 
     @Override 
     public void onCancelled(FirebaseError firebaseError) { 

     } 
    });Log.d("Moosa", "Size From Database is "+msg.size()); 
    return msg; 
}` 

並且有一個方法來顯示列表視圖從我打電話上述方法...

public void refreshListItems() { 
    Log.d("Moosa", "Invoke Refresh Method"); 
    AsyncTask<Void,Void,List<Message>> refresh=new AsyncTask<Void, Void, List<Message>>() { 
     @Override 
     protected List<Message> doInBackground(Void... params) { 
      List<Message> msg=db.retrieveDataFromDatabase(); 
      Log.d("Moosa", "Size is "+msg.size()); 

      return msg; 

     } 

     @Override 
     protected void onPostExecute(List<Message> messages) { 
      Log.d("Moosa", "OnPostExecution Start......."); 

      super.onPostExecute(messages); 
      final ListView list = (ListView) findViewById(R.id.emailList); 
      final MessageAdapter msgadptr = new MessageAdapter(MainActivity.this, messages); 
      list.setAdapter(msgadptr); 
      Log.d("Moosa", "OnPostExecuted......."); 


     } 
    }; 
    refresh.execute(); 
    Log.d("Moosa", "Refreshing List..."); 
} 

日誌--->
穆薩:調用Refresh方法
穆薩:刷新列表...
穆薩:大小爲0
穆薩:OnPostExecution開始.......
穆薩:OnPostExecuted .......
穆薩:規格從數據庫是12

回答

1

如果您發現您的logcat爲了清楚地

首先是打印列表大小爲0,但onPostExcute(-)後它返回列表的大小爲12.that意味着你retrieveDataFromDatabase()將返回空列表和背景 Listener加載數據,以便一旦裝載完成,它就是printi ng列表大小爲12.

即即在onDataChange(-)中,只有您可以將數據添加到適配器並將其設置爲ListView

希望這會幫助你。

相關問題