代码之家  ›  专栏  ›  技术社区  ›  Krum

比较Firebase中的数据

  •  2
  • Krum  · 技术社区  · 8 年前

    大家好,我得到一个空值,我不知道为什么。。如果你能帮助我,我将不胜感激。

    这是我在Firebase上的json。

    usuarios{
     krum{
          dni: "43193622"
          email: "pedroccc"
          login: "krum"
          nombre:"pedro"
          pass: "1234" }
    

    这是我的方法:

    login_text = (EditText) findViewById(R.id.txtLogin);
    

    onClickListener:

    final String log_child = login_text.getText().toString();
    final String pass_child = pass_text.getText().toString();
    mDatabase = FirebaseDatabase.getInstance().getReference("usuarios").child(log_child);
    
    mDatabase.child("pass").addValueEventListener(new ValueEventListener() {
         @Override
         public void onDataChange(DataSnapshot dataSnapshot) {
                String mpass = dataSnapshot.getValue(String.class);
                pass = mpass;
                }
    
         @Override
         public void onCancelled(DatabaseError databaseError) {
                }
         });
    

    然后我将pass与pass\u child进行比较,得出pass为null。。知道吗?非常感谢。

    PD。在Firebase中,所有设置均为true

    1 回复  |  直到 6 年前
        1
  •  1
  •   Peter Haddad    8 年前

    试试这个:

    final String log_child = login_text.getText().toString();
    final String pass_child = pass_text.getText().toString();
    mDatabase = FirebaseDatabase.getInstance().getReference("usuarios").child(log_child);
    
    mDatabase.addValueEventListener(new ValueEventListener() {
     @Override
     public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot data : dataSnapshot.getChildren()){
            String mpass = data.getValue().toString();
            pass = mpass;
            if(pass.equals(pass_child)){
                //code here
             }
            }
       }
    
     @Override
     public void onCancelled(DatabaseError databaseError) {
            }
     });
    

    添加for循环将使您能够从数据库获得传递。自从 onDatachange 是异步的(意味着它不会等到检索完数据后再转到其他方法,然后在检索数据时返回到该方法 onDatachange公司 )然后你必须在方法内部进行比较 onDatachange公司

    推荐文章