Android se.getReference(tableName).orderByChild(childToBeOrdered) .addChildEventListener(新的ChildEventListener(){ @凌驾 公共void onChildAdded(DataSnapshot DataSnapshot,字符串prevChildKey){ ArrayList dadosMedico=新的ArrayList(); 对于(DataSnapshot快照:DataSnapshot.getChildren()){ 添加(snapshot.getValue().toString()); } handler.trataMedico(dadosMedico); } @凌驾 公共void onChildChanged(DataSnapshot DataSnapshot,字符串prevChildKey){ } @凌驾 ChildRemoved上的公共void(DataSnapshot DataSnapshot){ } @凌驾 已移动ChildMoved的公共void(DataSnapshot DataSnapshot,字符串prevChildKey){ } @凌驾 已取消的公共void(DatabaseError DatabaseError){ } }); } public void testQueryMethod(字符串专业,最终PhisicianHandler处理程序){ 最终字符串tableName=“CadastroMedico”; 最后一个字符串childToBeOrdered=“mEspecialidade”; DatabaseReference database=FirebaseDatabase.getInstance().getReference() .儿童(“尸体医生”); database.child(“mDoctorID”) .儿童(“mNome”) .儿童(“mEspecialidade”) .orderByChild(childToBeOrdered) .equalTo(专业); database.addChildEventListener(新的ChildEventListener(){ @凌驾 公共void onChildAdded(DataSnapshot DataSnapshot,字符串prevChildKey){ ArrayList dadosMedico=新的ArrayList(); 对于(DataSnapshot快照: dataSnapshot.getChildren(){ 添加(snapshot.getValue().toString()); System.out.println(snapshot.getValue().toString()); } handler.trataMedico(dadosMedico); } @凌驾 ChildChanged上的公共无效(DataSnapshot DataSnapshot, 字符串(子键){ } @凌驾 ChildRemoved上的公共void(DataSnapshot DataSnapshot){ } @凌驾 一旦ChildMoved(DataSnapshot DataSnapshot, 字符串(子键){ } @凌驾 已取消的公共void(DatabaseError DatabaseError){ } }); }

Android se.getReference(tableName).orderByChild(childToBeOrdered) .addChildEventListener(新的ChildEventListener(){ @凌驾 公共void onChildAdded(DataSnapshot DataSnapshot,字符串prevChildKey){ ArrayList dadosMedico=新的ArrayList(); 对于(DataSnapshot快照:DataSnapshot.getChildren()){ 添加(snapshot.getValue().toString()); } handler.trataMedico(dadosMedico); } @凌驾 公共void onChildChanged(DataSnapshot DataSnapshot,字符串prevChildKey){ } @凌驾 ChildRemoved上的公共void(DataSnapshot DataSnapshot){ } @凌驾 已移动ChildMoved的公共void(DataSnapshot DataSnapshot,字符串prevChildKey){ } @凌驾 已取消的公共void(DatabaseError DatabaseError){ } }); } public void testQueryMethod(字符串专业,最终PhisicianHandler处理程序){ 最终字符串tableName=“CadastroMedico”; 最后一个字符串childToBeOrdered=“mEspecialidade”; DatabaseReference database=FirebaseDatabase.getInstance().getReference() .儿童(“尸体医生”); database.child(“mDoctorID”) .儿童(“mNome”) .儿童(“mEspecialidade”) .orderByChild(childToBeOrdered) .equalTo(专业); database.addChildEventListener(新的ChildEventListener(){ @凌驾 公共void onChildAdded(DataSnapshot DataSnapshot,字符串prevChildKey){ ArrayList dadosMedico=新的ArrayList(); 对于(DataSnapshot快照: dataSnapshot.getChildren(){ 添加(snapshot.getValue().toString()); System.out.println(snapshot.getValue().toString()); } handler.trataMedico(dadosMedico); } @凌驾 ChildChanged上的公共无效(DataSnapshot DataSnapshot, 字符串(子键){ } @凌驾 ChildRemoved上的公共void(DataSnapshot DataSnapshot){ } @凌驾 一旦ChildMoved(DataSnapshot DataSnapshot, 字符串(子键){ } @凌驾 已取消的公共void(DatabaseError DatabaseError){ } }); },android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,} 但这对我不起作用。当我试图在日志窗口中显示它时,我收到了这个消息:I/System.out:propertyValue:false,并且我没有从我的基础中获得任何值。我将添加一个图像,以便您可以看到我正在谈论的内容 我想做的是(以SQL为例):从CadastroMedico选择mDoctorID、mEmail、mEndereço* 我认为这是可能的,但我还不知道怎么做。我希望你能考虑一下。提前谢谢。试试这个 DatabaseReference mDatabase=FirebaseData

}

但这对我不起作用。当我试图在日志窗口中显示它时,我收到了这个消息:I/System.out:propertyValue:false,并且我没有从我的基础中获得任何值。我将添加一个图像,以便您可以看到我正在谈论的内容

我想做的是(以SQL为例):从CadastroMedico选择mDoctorID、mEmail、mEndereço*

我认为这是可能的,但我还不知道怎么做。我希望你能考虑一下。提前谢谢。

试试这个

DatabaseReference mDatabase=FirebaseDatabase.getInstance().getReference().child("CadastroMedico");
        mDatabase.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String prevChildKey) {

                String doctorID=dataSnapshot.child("mDoctorId").getValue(String.class);
                String mNome=dataSnapshot.child("mNome").getValue(String.class);
                handler.trataMedico(dadosMedico);
            }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String prevChildKey) {
            }

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {
            }

            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String prevChildKey) {
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
            }
        });
  • 创建一个类并声明要从其中的firebase获取的所有变量。在您的情况下,它们将是mDoctorID、mNome和mEspecialidade

  • 在class关键字之前添加
    @ignoreextroperties

  • 确保变量的名称与Firebase中节点的名称完全相同。它将如下所示:

    @IgnoreExtraProperties
    class CadastroMedico{
        public String mDoctorID="", mNome="", mEspecialidade="";
    }
    
    reference.addListenerForSingleValueEvent(new ValueEventListener(){
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            List<CadastroMedico> dadosMedico = new ArrayList();
            for (DataSnapshot snapshot : dataSnapshot.getChildren()){
                CadastroMedico cadastroMedico = snapshot.getValue(CadastroMedico.class)
                dadosMedico.add(cadastroMedico);
                System.out.println(cadastroMedico.mDoctorID + " " + cadastroMedico.mNome + " " +cadastroMedico.mEspecialidade);
            }
            //modify your handler accordingly
        }
    
        @Override
        public void onCancelled(DatabaseError databaseError) {
            //handle error
        }});
    
  • 现在调用firebase数据库查询,如果只想获取一次数据,请使用
    addListenerForSingleValueEvent
    。假设您只需要一次数据,因为SELECT查询也只返回一次数据,代码如下所示:

    @IgnoreExtraProperties
    class CadastroMedico{
        public String mDoctorID="", mNome="", mEspecialidade="";
    }
    
    reference.addListenerForSingleValueEvent(new ValueEventListener(){
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            List<CadastroMedico> dadosMedico = new ArrayList();
            for (DataSnapshot snapshot : dataSnapshot.getChildren()){
                CadastroMedico cadastroMedico = snapshot.getValue(CadastroMedico.class)
                dadosMedico.add(cadastroMedico);
                System.out.println(cadastroMedico.mDoctorID + " " + cadastroMedico.mNome + " " +cadastroMedico.mEspecialidade);
            }
            //modify your handler accordingly
        }
    
        @Override
        public void onCancelled(DatabaseError databaseError) {
            //handle error
        }});
    
    reference.addListenerForSingleValueEvent(新的ValueEventListener()){
    @凌驾
    公共void onDataChange(DataSnapshot DataSnapshot){
    List dadosMedico=new ArrayList();
    对于(DataSnapshot快照:DataSnapshot.getChildren()){
    CadastroMedico CadastroMedico=snapshot.getValue(CadastroMedico.class)
    dadosMedico.add(cadastroMedico);
    System.out.println(cadastroMedico.mDoctorID+“”+cadastroMedico.mNome+“”+cadastroMedico.messpecialidade);
    }
    //相应地修改处理程序
    }
    @凌驾
    已取消的公共void(DatabaseError DatabaseError){
    //处理错误
    }});
    

它删除了我代码上的警告,但我仍然没有从Firebase数据库中获得任何价值。这是因为引用错误,发布数据库的整个结构。发布整个数据库的屏幕截图,但节点位于您提供的顶部。好的,我会这样做it@Caio我不是指田野,你做错了的是getReference代码,为了做对这一点,我需要查看整个数据库,拍下它的所有父对象的照片。Sok Kamran,我会试试。谢谢