为了账号安全,请及时绑定邮箱和手机立即绑定

如何在不知道父节点 Firebase 的情况下读取值

如何在不知道父节点 Firebase 的情况下读取值

天涯尽头无女友 2023-06-14 10:42:45
我想7NmECb...在不知道节点父亲是什么的情况下获取节点的值。我只知道如何获得这样的价值:private void recuperarPedidos(){    DatabaseReference produtosRef = dReference            .child("empresa")            .child( "Farmacia")            .child(UsuarioFirebase.getIdUsuario());    produtosRef.addValueEventListener(new ValueEventListener() {        @Override        public void onDataChange(DataSnapshot dataSnapshot) {            empresas.clear();            for (DataSnapshot ds: dataSnapshot.getChildren()){                empresas.add( ds.getValue(Empresa.class) );            }            categoria = empresas.get(0).getCategoria();        }        @Override        public void onCancelled(DatabaseError databaseError) {        }    });}
查看完整描述

1 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

在没有完整路径的情况下,您无法在 Firebase 实时数据库中使用查询来获取两层深的对象。有一个解决方案,您可以在empresa节点上添加一个侦听器并使用getValue()方法。它返回 aMap<String, Object>但不推荐,因为您正在获取该节点内的所有数据。换句话说,这是对带宽和资源的浪费。empresa一种解决方案可能是通过将节点添加为用户对象的属性来更改数据库结构。


我将为您提供可以帮助您获取该对象的代码,但我鼓励您找到更适合您要执行的查询的更合适的数据库模式。


DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();

DatabaseReference empresaRef = rootRef.child("empresa");

ValueEventListener valueEventListener = new ValueEventListener() {

    @Override

    public void onDataChange(DataSnapshot dataSnapshot) {

        for(DataSnapshot ds : dataSnapshot.getChildren()) {

            Map<String, Object> map = (Map<String, Object>) ds.getValue();

            //Iterate through the map and get the results

        }

    }


    @Override

    public void onCancelled(@NonNull DatabaseError databaseError) {

        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!

    }

};

empresaRef.addListenerForSingleValueEvent(valueEventListener);


查看完整回答
反对 回复 2023-06-14
  • 1 回答
  • 0 关注
  • 85 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信