提问者:小点点

用ID搜索Java android中的FireBase数据库


我尝试在Java实现一个代码,通过使用ID搜索从数据库(firebase)中检索数据,并在表单中显示它。

btnShow.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            searchID = txtid.getText().toString().trim();
            DatabaseReference readRef = FirebaseDatabase.getInstance().getReference();
            DatabaseReference dref = readRef.child("Student");
            Query query = dref.orderByChild("id").equalTo(searchID);
            query.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    if(dataSnapshot.hasChildren()){
                        txtID.setText((dataSnapshot.child("id").getValue().toString()));
                        txtName.setText((dataSnapshot.child("name").getValue().toString()));
                        txtAdd.setText((dataSnapshot.child("address").getValue().toString()));
                        txtConNo.setText((dataSnapshot.child("conNo").getValue().toString()));
                    }
                    else
                        Toast.makeText(getApplicationContext(),"No Source to Display",Toast.LENGTH_SHORT).show();

                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });
        }
    });

这就是我实施的Java代码。但是当我运行程序并在数据库中给出正确的id时,它总是显示为“无源显示”(在我的数据库中有数据并且保存功能正常工作)

我是android工作室和Firebase的初学者。请修改以上代码,告诉我如何按ID搜索。

谢谢你。


共1个答案

匿名用户

请尝试以下操作:

if(dataSnapshot.exists()){
   for(DataSnapshot ds : dataSnapshot.getChildren()){
   txtID.setText((ds.child("id").getValue().toString()));
   txtName.setText((ds.child("name").getValue().toString()));
   txtAdd.setText((ds.child("address").getValue().toString()));
   txtConNo.setText((ds.child("conNo").getValue().toString()));
     }
   }

您的引用位于student节点,因此需要循环,然后使用ds访问属性。另外,不要忘记检查oncancelled中的错误:

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
    Log.d("TAG", databaseError.getMessage()); //Don't ignore potential errors!
}