繁体   English   中英

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

[英]How do I populate a ListView with data from 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的线程获取所有数据并将其存储到好友数组列表中,但是我在Android模拟器上只得到黑屏。 任何人都可以对我如何完成此任务提出任何建议吗?

那是因为Thread.sleep(1000); 正在阻止UI线程。 你绝对不应该那样做。 相反,您应该创建适配器并将其添加到onDataChange回调内部的列表中。 像这样:

final 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());
        }
        ArrayAdapter arrayAdapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1,
            friends);
        listView.setAdapter(arrayAdapter);
    }

    @Override
    public void onCancelled(FirebaseError firebaseError) {

    }
});

Firebase 响应的 Bcoz需要一些时间,因此在获取数据之前 ,其他代码将运行 ,然后您才获得Firebase响应 。因此,最好将代码放入列表器中,这需要一些时间.....

将这些行添加到您的onDataChange()方法中,并在结束for loop

  ArrayAdapter arrayAdapter = new ArrayAdapter(YourClassName.this,android.R.layout.simple_list_item_1,friends);
        listView.setAdapter(arrayAdapter);

暂时移除条件.......................

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM