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