Java 值可以';不能从实时数据库中删除

Java 值可以';不能从实时数据库中删除,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我正在尝试开发一个android应用程序,如果它出现在那里,我可以删除它的值。如果值被删除,它应该给出true;如果值不存在,它应该抛出false错误。我正在使用firebase实时数据库 我正试图做一个if-else语句,但我没能成功 package com.vi.dhananjay.lol; 导入androidx.annotation.NonNull; 导入androidx.appcompat.app.appcompat活动; 导入android.view.view; 导入android.w

我正在尝试开发一个android应用程序,如果它出现在那里,我可以删除它的值。如果值被删除,它应该给出true;如果值不存在,它应该抛出false错误。我正在使用firebase实时数据库

我正试图做一个if-else语句,但我没能成功

package com.vi.dhananjay.lol;
导入androidx.annotation.NonNull;
导入androidx.appcompat.app.appcompat活动;
导入android.view.view;
导入android.widget.Button;
导入android.os.Bundle;
导入android.widget.TextView;
导入android.widget.Toast;
导入com.google.firebase.database.DataSnapshot;
导入com.google.firebase.database.DatabaseError;
导入com.google.firebase.database.DatabaseReference;
导入com.google.firebase.database.FirebaseDatabase;
导入com.google.firebase.database.ValueEventListener;
公共类MainActivity扩展了AppCompatActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
按钮del=(按钮)findviewbyd(R.id.delButton);
按钮eb=(按钮)findViewById(R.id.ebDelete);
按钮teac=(按钮)findViewById(R.id.teaDelete);
按钮csd=(按钮)findViewById(R.id.conDelete);
按钮hosp=(按钮)findViewById(R.id.hosDelete);
TextView qrCode=(TextView)findViewById(R.id.qrCode);
DatabaseReference rootRef=FirebaseDatabase.getInstance().getReference();
rootRef.addListenerForSingleValueEvent(新的ValueEventListener()){
@凌驾
void delete(数据快照快照){
if(snapshot.hasChild(“qrCode”)){
//运行一些代码
}
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
eb.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
ebDelete();
}
});
teac.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
teacDelete();
}
});
csd.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
csdDelete();
}
});
hosp.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
hospDelete();
}
});
del.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
删除();
}
});
}
私有void delete(){
DatabaseReference qrcode=FirebaseDatabase.getInstance().getReference(“委托”);
qrcode.removeValue();
Toast.makeText(这是“代码验证”,Toast.LENGTH_LONG.show();
}
私有void ebDelete(){
DatabaseReference qrcode=FirebaseDatabase.getInstance().getReference(“委托”);
qrcode.removeValue();
Toast.makeText(这是“代码验证”,Toast.LENGTH_LONG.show();
}
私有无效teacDelete(){
DatabaseReference qrcode=FirebaseDatabase.getInstance().getReference(“委托”);
qrcode.removeValue();
Toast.makeText(这是“代码验证”,Toast.LENGTH_LONG.show();
}
私有无效csdDelete(){
DatabaseReference qrcode=FirebaseDatabase.getInstance().getReference(“委托”);
qrcode.removeValue();
Toast.makeText(这是“代码验证”,Toast.LENGTH_LONG.show();
}
私家医院{
DatabaseReference qrcode=FirebaseDatabase.getInstance().getReference(“委托”);
qrcode.removeValue();
Toast.makeText(这是“代码验证”,Toast.LENGTH_LONG.show();
}
}
产生的错误

错误:不是抽象的,并且不重写ValueEventListener中的抽象方法onDataChange(DataSnapshot)


实现
ValueEventListener
时,必须同时实现该接口的两种方法:
onDataChange
onCancelled
。似乎您已将
onDataChange
的名称更改为
deletelete
,这意味着编译器无法再找到
onDataChange
,从而导致出现错误

要解决此问题,请将
deletelete
重命名回
onDataChange

rootRef.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    void onDataChange(DataSnapshot snapshot) {
        if (snapshot.hasChild("qrCode")) {
            // run some code
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        throw databaseError.toException(); // don't ignore errors
    }
});

如果为了清晰起见想使用
deletelete
方法名称,可以将其包含在实现中。您只需要确保仍然实现
onDataChange
,否则编译器不知道该做什么

比如:

rootRef.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    void onDataChange(DataSnapshot snapshot) {
        deleteDelete(snapshot)
    }

    void deleteDelete(DataSnapshot snapshot) {
        if (snapshot.hasChild("qrCode")) {
            // run some code
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        throw databaseError.toException(); // don't ignore errors
    }
});

您会注意到,
deleteDelete
在这里没有标记为
@Override
,因为它没有覆盖/实现
ValueEventListener
中的方法,谢谢,对于答案,但我想问我必须发送到数据库的TextView字段中的值如何插入它们?您是在问如何从文本视图中获取值吗?看,是的,先生!从文本视图获取值,将其发送到数据库(如果该值存在),然后删除(如果该值不存在),然后给出“False”答复。