【问题标题】:How can I get the value of an arraylist that is updated inside an addValueEventListener?如何获取在 addValueEventListener 中更新的数组列表的值?
【发布时间】:2018-12-05 22:24:32
【问题描述】:

我想显示来自ArrayListlistview,我通过查询得到。 ArrayList pt in addValueEventListener 在 addValueEventListener 之外变为 null,尽管 ArrayList 被声明为静态属性。 有没有办法在这个eventlistener?之外获取ArrayList的值

query.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if(dataSnapshot!=null) {
            Log.e("TAG", String.valueOf(dataSnapshot.child("uid").child("Name")));
            int i=0;
            for(DataSnapshot snapshot : dataSnapshot.getChildren()){
                String userName = snapshot.child("Name").getValue(String.class);
                Pt.add(userName);
                //Toast.makeText(getApplicationContext(),  dataSnapshot.toString(), Toast.LENGTH_SHORT).show();
            }
        } else {
            Toast.makeText(getApplicationContext(), "Datasnapshot is null", Toast.LENGTH_SHORT).show();
         }
    }

【问题讨论】:

标签: java android asynchronous arraylist firebase-realtime-database


【解决方案1】:

试试这个代码..

private List<String> stringList=new ArrayList<>(); // define as class level

query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
    if(dataSnapshot!=null) {
        Log.e("TAG", String.valueOf(dataSnapshot.child("uid").child("Name")));
        int i=0;
        for(DataSnapshot snapshot : dataSnapshot.getChildren()){
            String userName = snapshot.child("Name").getValue(String.class);
            Pt.add(userName);
            //Toast.makeText(getApplicationContext(),  dataSnapshot.toString(), Toast.LENGTH_SHORT).show();
        }
    } else {
        Toast.makeText(getApplicationContext(), "Datasnapshot is null", Toast.LENGTH_SHORT).show();
     }
}
        ArrayAdapter<String>adapter=new ArrayAdapter<>(MainActivity.this,android.R.layout.simple_list_item_1,stringList);
    listView.setAdapter(adapter);

【讨论】:

    【解决方案2】:

    由于此方法的异步行为,您的Pt 列表将始终位于onDataChange() 之外的empty。这意味着当您尝试在此方法之外使用 Pt 列表时,数据尚未从数据库中加载完毕,这就是无法访问的原因。

    一个快速解决这个问题的方法是只在onDataChange()方法内使用Pt列表,或者如果你想在外面使用它,我建议你从这个@查看我的回答的最后一部分987654321@ 我在其中解释了如何使用自定义回调来完成。您也可以看看这个 video 以获得更好的理解。

    【讨论】:

      猜你喜欢
      • 2022-11-17
      • 1970-01-01
      • 1970-01-01
      • 2016-05-29
      • 1970-01-01
      • 1970-01-01
      • 2013-10-09
      • 1970-01-01
      • 2020-08-04
      相关资源
      最近更新 更多