【问题标题】:Query Specific Child Form Firebase查询特定子表单 Firebase
【发布时间】:2019-08-30 04:40:11
【问题描述】:

我有下图中的结构,我想从所有节点中获取全部数据,按“金额”查询。我该怎么做那个查询?由于所有根都不同,如何从所有节点获取数量值。

我很害怕:

    zonesRef= FirebaseDatabase.getInstance().getReference("Database");
    zone1Ref = zonesRef.child("Payments");
    Query queryRef = zone1Ref.orderByChild("amount");
    queryRef.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
            Toast.makeText(getApplicationContext(),s,Toast.LENGTH_SHORT).show();
        }

我有不同的用户具有不同的用户 ID。这是我用来将数据推送到 Firebase 的代码。

    currentFirebaseUser = FirebaseAuth.getInstance().getCurrentUser() ;
    UserID= currentFirebaseUser.getUid().toString();

    zonesRef= FirebaseDatabase.getInstance().getReference("Database");
    zone1Ref = zonesRef.child(Type);
    zone1NameRef = zone1Ref.child(UserID);

    Submit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String Amount2= Amount.getText().toString();
            String Description2= Description.getText().toString().trim();


            String uniqueKey = zone1NameRef.push().getKey();
            UniqueKey= zone1NameRef.child(uniqueKey);

            UniqueKey.child("amount").setValue(Amount2);
            UniqueKey.child("date").setValue(currentDateTimeString);
            UniqueKey.child("description").setValue(Description2);
            UniqueKey.child("school").setValue(School);
        }
    });

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    检查您的数据结构后,您在访问金额之前有两个键。

    DatabaseReference getKeys;
        DatabaseReference Amounts;
        getKeys = FirebaseDatabase.getInstance().getReference("Database");
        Amounts = FirebaseDatabase.getInstance().getReference("Database");
        getKeys.child("Payments").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot snapshot:dataSnapshot.getChildren()){
                    String key = snapshot.getKey();
    
                    Amounts.child("Payments").child(key).addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                            for(DataSnapshot snapshot1:dataSnapshot.getChildren()) {
                                String amount = snapshot1.child("amount").getValue(String.class);
                                Toast.makeText(getApplicationContext(),amount,Toast.LENGTH_SHORT).show();
                            }
                        }
    
                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {
    
                        }
                    });
                }
            }
    
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
    
            }
        });
    

    【讨论】:

    • zone1Ref = zoneRef.child("Payments").child(keys);如果是这种情况,您必须根据您的结构遵循我的第二个解决方案,首先获取用户 ID。等一下,我会编辑我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-07
    • 1970-01-01
    • 2021-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多