2017-08-29 63 views
-1

首先,我在很多地方搜索过,但我根本没有找到这个问题的答案,所以,我在这里问。但是,我想知道:如何转换这样的查询:*在Android的Firebase数据库中选择a,b,c FROM MyTable *?下面我想尽了办法如下:如何在Android中的Firebase数据库中使用多个字段执行SELECT?

public void testQueryMethod(final PhisicianHandler handler) { 

    final String databaseReference = "CadastroMedico"; 

    database.getReference(databaseReference) 
      .child("mDoctorID") 
      .child("mNome") 
      .child("mEspecialidade") 
      .addChildEventListener(new ChildEventListener() { 
       @Override 
       public void onChildAdded(DataSnapshot dataSnapshot, String prevChildKey) { 

        ArrayList<String> dadosMedico = new ArrayList<>(); 

        for (DataSnapshot snapshot : dataSnapshot.getChildren()) { 
         dadosMedico.add(snapshot.getValue().toString()); 
         System.out.println(snapshot.getValue().toString()); 
        } 
        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) { 
       } 
      }); 
} 

我的整个模式

公共类FirebaseDatabaseModel {

//Creating the instance of the database 
private FirebaseDatabase database = FirebaseDatabase.getInstance(); 

public ArrayList<String> dataRetriever(final ArrayList<String> dadosMedicosRecebidos, final BaseAdapter adapter) { 

    final String tableName = "Especialidade"; 
    final String childToBeOrdered = "NomesEspecialidades"; 

    database.getReference(tableName).orderByChild(childToBeOrdered) 
      .addChildEventListener(new ChildEventListener() { 
       @Override 
       public void onChildAdded(DataSnapshot dataSnapshot, String prevChildKey) { 

        for (DataSnapshot snapshot : dataSnapshot.getChildren()) { 
         dadosMedicosRecebidos.add(snapshot.getValue().toString()); 
         adapter.notifyDataSetChanged(); 
        } 
       } 

       @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) { 
       } 
      }); 

    return dadosMedicosRecebidos; 
} 

/** 
* This method gets all the registries where specialty is equal to the selected item on the spinner 
*/ 
public void queryMethod(String selectedItem, final PhisicianHandler handler) { 

    final String tableName = "CadastroMedico"; 
    final String childToBeOrdered = "mEspecialidade"; 

    database.getReference(tableName) 
      .orderByChild(childToBeOrdered) 
      .equalTo(selectedItem) 
      .addChildEventListener(new ChildEventListener() { 
       @Override 
       public void onChildAdded(DataSnapshot dataSnapshot, String prevChildKey) { 

        ArrayList<String> dadosMedico = new ArrayList<>(); 

        for (DataSnapshot snapshot : dataSnapshot.getChildren()) { 
         dadosMedico.add(snapshot.getValue().toString()); 
        } 
        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) { 
       } 
      }); 
} 

public void userIdQueryMethod(final PhisicianHandler handler) { 

    final String tableName = "UserID"; 
    final String childToBeOrdered = "ID/UserID"; 

    database.getReference(tableName).orderByChild(childToBeOrdered) 
      .addChildEventListener(new ChildEventListener() { 
       @Override 
       public void onChildAdded(DataSnapshot dataSnapshot, String prevChildKey) { 

        ArrayList<String> dadosMedico = new ArrayList<>(); 

        for (DataSnapshot snapshot : dataSnapshot.getChildren()) { 
         dadosMedico.add(snapshot.getValue().toString()); 
        } 
        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) { 
       } 
      }); 
} 

public void doctorIdQueryMethod(final PhisicianHandler handler) { 

    final String tableName = "DoctorID"; 
    final String childToBeOrdered = "ID/DoctorID"; 

    database.getReference(tableName).orderByChild(childToBeOrdered) 
      .addChildEventListener(new ChildEventListener() { 
       @Override 
       public void onChildAdded(DataSnapshot dataSnapshot, String prevChildKey) { 

        ArrayList<String> dadosMedico = new ArrayList<>(); 

        for (DataSnapshot snapshot : dataSnapshot.getChildren()) { 
         dadosMedico.add(snapshot.getValue().toString()); 
        } 
        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) { 
       } 
      }); 
} 

public void testQueryMethod(String specialty, final PhisicianHandler handler) { 

    final String tableName = "CadastroMedico"; 
    final String childToBeOrdered = "mEspecialidade"; 

    DatabaseReference database = FirebaseDatabase.getInstance().getReference() 
      .child("CadastroMedico"); 

      database.child("mDoctorID") 
      .child("mNome") 
      .child("mEspecialidade") 
      .orderByChild(childToBeOrdered) 
      .equalTo(specialty); 

      database.addChildEventListener(new ChildEventListener() { 
       @Override 
       public void onChildAdded(DataSnapshot dataSnapshot, String prevChildKey) { 

        ArrayList<String> dadosMedico = new ArrayList<>(); 

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

      dadosMedico.add(snapshot.getValue().toString());       
      System.out.println(snapshot.getValue().toString()); 

       } 
        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) { 
       } 
      }); 
} 

}

但它没有为我工作。当我尝试在日志窗口中显示它时,我收到了这条消息:I/System.out:propertyValue:false,我没有从我的基地获取任何值。我会添加一张图片,以便您可以看到我在说什么。

Image 1: The fields i'm talking about

Document: Screenshots of my whole database

我想什么做的是(在SQL只是举例):*选择mDoctorID,mEmail,mEndereçoFROM CadastroMedico; *

我认为这是可能的,但我不知道如何去做。我会很感激一些关于它的想法。提前致谢。

回答

0

试试这个

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) { 
      } 
     }); 
+0

它取消了对我的代码的警告,但我仍然没有得到任何我的Firebase数据库中的值 – Caio

+0

那是因为引用是错误的,请发布您的数据库的整个结构 –

+0

您的意思是我的代码或我的数据库的屏幕截图? – Caio

0
  • 创建一个类,并声明你想从它火力点来获取所有变量。在你的情况下,他们将是mDoctorID,mNome和mEspecialidade。

  • class关键字前添加@IgnoreExtraProperties

  • 确保变量的名称是在Firebase.It节点的名称将这个样子完全一样:

    @IgnoreExtraProperties 
    class CadastroMedico{ 
        public String mDoctorID="", mNome="", mEspecialidade=""; 
    } 
    
  • 现在打电话firebase数据库查询,如果您只想获取一次数据,请使用addListenerForSingleValueEvent。假设你想要的数据只有一次,如SELECT查询也返回的数据只有一次,代码将是这个样子:

    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 
        }}); 
    
+0

Ok Kamran,我会试试看。谢谢 – Caio

相关问题