英文:
Firebase on Android : DataSnapshot.getChildrenCount() is returning 0
问题
这是我的Firebase实时数据库:
这是我的代码:
DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference();
EditText t1 = (EditText) findViewById(R.id.editText10);
final String s1 = t1.getText().toString();
mDatabase.child("users").orderByChild("name")
.equalTo(s1)
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
TextView tv2 = (TextView) findViewById(R.id.textView5);
tv2.setText(Long.toString(dataSnapshot.getChildrenCount()));
}
}
我正在在EditText字段中输入这些值:
editText10 => Anupam Singh
dataSnapshot.getChildrenCount()
应该为 1,但它却为 0。
我做错了什么?
英文:
This is my firebase realtime database :
This is my code :
DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference();
EditText t1 = (EditText) findViewById(R.id.editText10);
final String s1 = t1.getText().toString();
mDatabase.child("users").orderByChild("name")
.equalTo(s1)
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
TextView tv2 = (TextView) findViewById(R.id.textView5);
tv2.setText(Long.toString(dataSnapshot.getChildrenCount()));
}
}
I am entering these values in EditText fields :
editText10 => Anupam Singh
dataSnapshot.getChildrenCount() should be 1 but it is coming to be 0.
What am I doing wrong?
答案1
得分: 1
在你的数据库中,你有以下内容:
users
name_title_company_location
因此,属性 name_title_company_location
是节点 users
的直接子级。当你使用 orderByChild
时,你并没有访问该节点。
你需要在数据库中添加一个 id
:
users
id
name_title_company_location
然后你的代码将会工作。
或者你可以将代码更改如下,向上移动一级:
mDatabase.orderByChild("name_title_company_location").equalTo(...)
英文:
In your database you have the following:
users
name_title_company_location
Therefore the attribute name_title_company_location
is a direct child under nodeusers
. When you are using orderByChild
, you are not accessing that node.
What you need to do is add an id
in the database:
users
id
name_title_company_location
Then your code will work.
Or you can change the code to the following, go one level up:
mDatabase.orderByChild("name_title_company_location").equalTo(...)
答案2
得分: 0
-the issue is in orderByChild.
问题出在 orderByChild。
-you have pass query and ask for single value event listener.
你已经传递了查询并请求单个值事件监听器。
do as below :
按照以下方式操作:
DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference("users");
Query query = mDatabase.child("name_title_company_location")
.equalTo(s1 + "" + s2 + "" + s3 + "_" + s4);
query.addListenerForSingleValueEvent(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
TextView tv2 = (TextView) findViewById(R.id.textView5);
tv2.setText(Long.toString(dataSnapshot.getChildrenCount()));
}
}
-it will return the data
它会返回数据。
英文:
-the issue is in orderByChild.
-you have pass query and ask for single value event listener.
do as below :
DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference("users");
Query query = mDatabase.("name_title_company_location")
.equalTo(s1 + "_" + s2 + "_" + s3 + "_" + s4);
query.addSingleValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
TextView tv2 = (TextView) findViewById(R.id.textView5);
tv2.setText(Long.toString(dataSnapshot.getChildrenCount()));
}
}
-it will return the data
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论