如何使用Firebase中的数据填充ListView?

时间:2016-05-18 06:13:09

标签: java android multithreading listview firebase

ListView listView = (ListView) findViewById(R.id.listView);
    final ArrayList<String> friends = new ArrayList<String>();
    players.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot player : dataSnapshot.getChildren()) {
                Log.i("player", player.getKey());
                friends.add(player.getKey());

            }
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {

        }
    });

    while (friends.isEmpty()) {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

        // link between a set of data and the AdapterView that displays the data
        ArrayAdapter arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1,
                friends);
        listView.setAdapter(arrayAdapter);

我预计它会使当前线程等到Firebase的线程获取所有数据并将其存储到friends数组列表中,但我的Android模拟器上只有黑屏。 任何人都可以就如何完成这项任务提出任何建议吗?

2 个答案:

答案 0 :(得分:4)

这是因为 , "onlineCourses": [ { "title": "Javascript Syntax", "school": "Udacity", "dates": "May 2016" }] } 阻止了UI线程。你永远不应该这样做。相反,您应该创建适配器并将其添加到Thread.sleep(1000);回调内的列表中。像这样:

onDataChange

答案 1 :(得分:1)

firebase响应的Bcoz需要一些时间,因此其他代码会在您获取数据之前运行,然后您会获得 firebase响应。这是个好主意将你的代码放在listner中需要一些时间......

onDataChange() ................

for loop

在条件下移除.......................

享受编码.......................