我正在使用firebase来保存数据,我在从Firebase通过密钥返回数据时遇到了一些问题 简而言之,这是我的firebase页面:
this is my firebase page 首先我没有使用Query,它确实有效但是使用Query,它更灵活一点,所以我尝试这样做,它不起作用 所以这是我的代码,我希望你能帮助我
firebaseDatabase = FirebaseDatabase.getInstance().getReference("Objects");
Query query = firebaseDatabase.child("Users").child(key//key is a string value entered by the user ).orderByChild("name").equalTo(name//the name the user is searching for );
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot!=null) {
for (DataSnapshot datasnapshot : dataSnapshot.getChildren()) {
if (datasnapshot!=null) {
textView.setText(dataSnapshot.child(key).getValue(Artest.class).getName());
editText.setText("");
}
Toast.makeText(SearchByKey.this, "in the for loop there was null", Toast.LENGTH_LONG).show();
textView2.setText("null....");
}
}
else{
Toast.makeText(SearchByKey.this, "dataSnapshot was null", Toast.LENGTH_LONG).show();
textView2.setText("null");
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException();
}`
此代码有效,但不涉及使用Query
String keyy= editText.getText().toString();
firebaseDatabase.child("users").child(keyy).addValueEventListener(new
ValueEventListener() {
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot == null ) {
Toast.makeText(SearchByKey.this, "dataSnapshot was null",
Toast.LENGTH_LONG).show(); }
if (dataSnapshot.getKey().equalsIgnoreCase(keyy)){
textView.setText(dataSnapshot.getValue(Artest.class).getName());
textView2.setText(dataSnapshot.getValue(Artest.class).getGoal());
editText.setText(""); }
else {
Toast.makeText(SearchByKey.this, "make sure you entered the right
key , try again ", Toast.LENGTH_LONG).show();
editText.setText(""); }
}
public void onCancelled(DatabaseError databaseError)
{
}
嘿,这就是我设法解决这个问题的方法
首先,我只在钥匙上进行搜索,
我对完整用户拍了快照......
简而言之,这是代码给我一个完美的输出:
firebaseDatabase= FirebaseDatabase.getInstance().getReference("Objects");
final String keyy= editTextart.getText().toString();
Query query = firebaseDatabase.child("users");
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot == null) {
Toast.makeText(Search.this, "dataSnapshot was null", Toast.LENGTH_LONG).show();
} else {
textView.setText(dataSnapshot.child(keyy).getValue(Artest.class).getName());
textView2.setText(dataSnapshot.child(keyy).getValue(Artest.class).getGoal());
editTextart.setText("");
}
}
希望它可以帮到某人:)
答案 0 :(得分:0)
小错字 -
将Users
更改为users
: - )
答案 1 :(得分:0)
您的问题是您使用的是不正确的孩子。请更改此行:
Query query = firebaseDatabase.child("Users")...
与
Query query = firebaseDatabase.child("users")...
使用u
小写。
希望它有所帮助。
答案 2 :(得分:0)
对于您上面的特定查询(您只需要调用child(key)
,您只需要执行以下操作(而不是调用getChildren()
)
Artest artist = dataSnapshot.getValue(Artest.class);