我正在尝试查找是否有办法知道Firebase实时数据库中是否有提取的数据。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // ARRAY
    accountList = new ArrayList<>();
    // Assigning Object to Controls (bullshit)
    textboxUser = (TextView) findViewById(R.id.textBoxUsername);
    textboxPass = (TextView) findViewById(R.id.textBoxPassword);
    buttonEnter = (Button) findViewById(R.id.buttonEnter);

    postRef = FirebaseDatabase.getInstance().getReference("account");
    dataRefaccount = FirebaseDatabase.getInstance().getReference("account");


    // OnClick Method Button
    buttonEnter.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            try {
                username = textboxUser.getText().toString();
                Query query = FirebaseDatabase.getInstance().getReference("account").orderByChild("username").equalTo(username);
                query.addListenerForSingleValueEvent(valueEventListener);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                Toast.makeText(getApplicationContext(), getted, Toast.LENGTH_LONG).show();
            }



        }
    });
}

ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {

        for (DataSnapshot data : dataSnapshot.getChildren()) {
            if (data.child(username).exists()) {
                getted = "yes";
            } else {
                getted = "No";
            }
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Toast.makeText(getApplicationContext(), "error", Toast.LENGTH_LONG).show();
    }
};


吸气剂始终为“否”。

最佳答案

您应该尝试一下。首先,请确保您在查询响应中没有收到任何错误。

Query query = FirebaseDatabase.getInstance().getReference().child("account").orderByChild("username").equalTo(username);

ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if (dataSnapshot.getValue() != null && dataSnapshot.getChildrenCount() > 0) {
           for (DataSnapshot data : dataSnapshot.getChildren()) {

                // I'm sure you are looking for below line.. Go and try this.
                if (data.child("username").getValue().toString().equal(username) ) {
                  getted = "yes";
                  break;
                } else {
                  getted = "No";
                }
           }
        } else {
            getted = No value available;
        }
        Toast.makeText(getApplicationContext(), "getted : " + getted, Toast.LENGTH_LONG).show();
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Toast.makeText(getApplicationContext(), "error", Toast.LENGTH_LONG).show();
    }
};


仅供参考:Firebase调用是异步调用,因此单击按钮的finally子句将始终在firebase响应之前执行。因此,尝试从此处删除try-catch并使用上面的代码打印获取的值。

09-04 03:57
查看更多