【问题标题】:Retriving data from Firebase in Arraylist in Android [closed]在Android的Arraylist中从Firebase检索数据[关闭]
【发布时间】:2019-01-16 15:58:56
【问题描述】:

如何将所有Electrician 数据检索到ListView 中?

【问题讨论】:

    标签: java android firebase firebase-realtime-database


    【解决方案1】:

    假设您的电工对象有一个名为 Electrician 的模型类,要获取电工对象列表,请使用以下代码:

    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference electricianRef = rootRef.child("Employee").child("Electrician");
    ValueEventListener valueEventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            List<Electrician> list = new ArrayList<>();
            for(DataSnapshot ds : dataSnapshot.getChildren()) {
                Electrician electrician = ds.getValue(Electrician.class);
                list.add(electrician);
                Log.d("TAG", electrician.getLname());
            }
        }
    
        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {}
    };
    electricianRef.addListenerForSingleValueEvent(valueEventListener);
    

    您可以更简单地实现这一点,例如使用 String 类并获取电工姓名列表:

    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference electricianRef = rootRef.child("Employee").child("Electrician");
    ValueEventListener valueEventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            List<String> list = new ArrayList<>();
            for(DataSnapshot ds : dataSnapshot.getChildren()) {
                String lName = ds.child("Lname").getValue(String.class);
                list.add(lName);
                Log.d("TAG", lName);
            }
        }
    
        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {}
    };
    electricianRef.addListenerForSingleValueEvent(valueEventListener);
    

    【讨论】:

    • 第 8 行显示 required:java.lang.String found:com.example.hp.Electrician
    • 你是对的。抱歉,是我的错。请参阅我更新的答案。应该是:String lName = ds.child("Lname").getValue(String.class);.
    • 第二张截图中没有
    • 是的,请再看一遍。现在可以用了吗?
    • 我认为代码可以工作,所以谢谢你。但我没有得到输出,因为我自己的代码可能是,当我点击一个 recyclerview 项目(电工)时,它只是进入下一个活动,但是没有查看列表视图,其中所有数据的详细信息都被检索...我想我必须在我的 recyclerview 中更改 onclicklistener 上的代码...你能建议我解决这个问题的方法吗
    【解决方案2】:

    从 firebase 创建对象列表(电工),然后通过在自定义适配器中传递对象列表来创建列表视图。

    【讨论】:

      【解决方案3】:

      如果您想要一个列表视图,其中列表视图中的每个项目都包含某个电工的部分或全部数据,您首先需要节点“电工”的数据快照。还要创建一个名为“elecrician”的对象,它具有与 firebase 数据库中相同的数据字段。然后使用数据快照创建类似于Ryan Pierce 答案的“电工”对象数组。现在您已经有了一组电工及其数据,您可以在列表视图中显示您想要显示的数据。

      此外,如果您想计算例如员工在那里工作了多长时间(在我看来更容易使用),那么使用时间(以毫秒为单位)而不是日期作为字符串可能更容易。此外,“JobTitle”字段可能是多余的,因为节点标题已经说明了职位,例如'电工'。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-18
        • 1970-01-01
        • 2019-08-06
        • 1970-01-01
        • 2017-08-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多