2015-06-20 143 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

希望这会帮助你。

相关问题