删除并更新在android studio、Java和firebase中按ID搜索的项目
我用Java实现了代码,通过使用ID进行搜索并在表单中显示,从Firebase数据库检索数据。如果我添加id,它将正确显示数据 已成功检索数据 firebase中的数据 但当我试图删除或更新此数据时,它总是显示为“无数据资源”。我试图实现代码,但它不起作用。如何删除和更新特定数据(按ID搜索) 我试过的全部代码删除并更新在android studio、Java和firebase中按ID搜索的项目,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我用Java实现了代码,通过使用ID进行搜索并在表单中显示,从Firebase数据库检索数据。如果我添加id,它将正确显示数据 已成功检索数据 firebase中的数据 但当我试图删除或更新此数据时,它总是显示为“无数据资源”。我试图实现代码,但它不起作用。如何删除和更新特定数据(按ID搜索) 我试过的全部代码 public class MainActivity extends AppCompatActivity { EditText txtID,txtName,txtAdd,tx
public class MainActivity extends AppCompatActivity {
EditText txtID,txtName,txtAdd,txtConNo,txtid;
Button btnSave,btnShow,btnUpdate,btnDelete;
DatabaseReference dbRef;
Student std;
String searchID;
private void clearControls(){
txtID.setText("");
txtName.setText("");
txtAdd.setText("");
txtConNo.setText("");
txtid.setText("");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtID = findViewById(R.id.EtID);
txtName = findViewById(R.id.EtName);
txtAdd = findViewById(R.id.EtAddress);
txtConNo = findViewById(R.id.EtConNo);
txtid = findViewById(R.id.search);
btnSave = findViewById(R.id.BtnSave);
btnShow = findViewById(R.id.BtnShow);
btnUpdate = findViewById(R.id.BtnUpdate);
btnDelete = findViewById(R.id.BtnDelete);
std = new Student();
}
protected void onResume(){
super.onResume();
btnSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dbRef = FirebaseDatabase.getInstance().getReference().child("Student");
try{
if(TextUtils.isEmpty(txtID.getText().toString()))
Toast.makeText(getApplicationContext(),"Please enter an ID",Toast.LENGTH_SHORT).show();
else if(TextUtils.isEmpty(txtName.getText().toString()))
Toast.makeText(getApplicationContext(),"Please enter a Name",Toast.LENGTH_SHORT).show();
else if (TextUtils.isEmpty(txtAdd.getText().toString()))
Toast.makeText(getApplicationContext(),"Please enter an Address",Toast.LENGTH_SHORT).show();
else {
std.setID(txtID.getText().toString().trim());
std.setName(txtName.getText().toString().trim());
std.setAddress(txtAdd.getText().toString().trim());
std.setConNo(txtConNo.getText().toString().trim());
dbRef.push().setValue(std);
Toast.makeText(getApplicationContext(),"Data Saved Successfully",Toast.LENGTH_SHORT).show();
clearControls();
}
}
catch (NumberFormatException e){
Toast.makeText(getApplicationContext(),"Invalid Contact Number",Toast.LENGTH_SHORT).show();
}
}
});
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.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()));
}
}
else
Toast.makeText(getApplicationContext(),"No Source to Display",Toast.LENGTH_SHORT).show();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d("TAG", databaseError.getMessage()); //Don't ignore potential errors!
}
});
}
});
btnUpdate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DatabaseReference updf = FirebaseDatabase.getInstance().getReference().child("Student");
updf.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.hasChild("Student")){
try{
std.setID(txtID.getText().toString().trim());
std.setName(txtName.getText().toString().trim());
std.setAddress(txtAdd.getText().toString().trim());
std.setConNo(txtConNo.getText().toString().trim());
dbRef = FirebaseDatabase.getInstance().getReference().child("Student");
dbRef.setValue(std);
clearControls();
Toast.makeText(getApplicationContext(),"Data updated successfully",Toast.LENGTH_SHORT).show();
}catch(NumberFormatException e){
Toast.makeText(getApplicationContext(),"Invalid data",Toast.LENGTH_SHORT).show();
}
}else
Toast.makeText(getApplicationContext(),"Nothing to show",Toast.LENGTH_SHORT).show();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d("TAG", databaseError.getMessage());
}
});
}
});
btnDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DatabaseReference deldf = FirebaseDatabase.getInstance().getReference().child("Student");
deldf.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.hasChild("Student")){
dbRef = FirebaseDatabase.getInstance().getReference().child("Student");
dbRef.removeValue();
clearControls();
Toast.makeText(getApplicationContext(),"Data Deleted successfully",Toast.LENGTH_SHORT).show();
}else
Toast.makeText(getApplicationContext(),"Nothing to show",Toast.LENGTH_SHORT).show();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d("TAG", databaseError.getMessage());
}
});
}
});
}
}
要删除带有
ID001
的元素,请使用以下代码行:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference studentRef = rootRef.child("Student");
Query queryById = studentRef.orderByChild("id").equalTo(idToBeRemoved);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
ds.getRef().removeValue();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d("TAG", databaseError.getMessage()); //Don't ignore potential errors!
}
};
studentRef.addListenerForSingleValueEvent(valueEventListener);
上述代码的结果将是删除具有
ID001
的元素。如果需要更新相同的元素,只需使用updateChildren()
我不想指定id。我希望用户通过id进行搜索并从数据库中检索数据。然后用户可以更新和删除他搜索的id的详细信息。它可以是数据库中的任何id。在这种情况下,我用idToBeRemoved
更改了ID001
的硬编码值,这个变量可以获得用户正在键入的确切值,对吗?是的,先生。如果将类型id用作“ID002”,则需要更新和删除该特定数据。确切地说,idToBeRemoved=textView.getText().toString()
,对吗?query.addListenerForSingleValueEvent(新值EventListener(){@Override public void onDataChange(@NonNull DataSnapshot DataSnapshot){for(DataSnapshot ds:DataSnapshot.getChildren()){HashMap map=newhashmap();map.put(“id”,txtID);ds.getRef().updateChildren(map);clearControls();}}尝试像这样实现,但不起作用