首页 > 解决方案 > 从 Firebase 数据库中删除特定数据

问题描述

我正在开发一个 Android 应用程序,该应用程序将药物与到期日期一起存储,如下所示

完美存储的数据;现在我想做的是按日期删除特定数据。我是 Android 新手,搜索过视频,但我得到的教程似乎很难理解。我可以在 android 中查看来自 Firebase 的数据,但现在我想删除它。我已经在 Stack Overflow 上搜索了thisthis

我检索数据的代码是

public class RetreiveActivity extends AppCompatActivity {
ListView mylistView;
DatabaseReference db;
List<ClassMedicine> medicineList;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_retreive);
    mylistView= findViewById(R.id.mylist);
    medicineList= new ArrayList<>();
    db= FirebaseDatabase.getInstance().getReference("medicines");
}

@Override
protected void onStart() {
    super.onStart();
    db.addValueEventListener(new ValueEventListener() {


        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            medicineList.clear();
            for (DataSnapshot medicineSnapshot:dataSnapshot.getChildren()){
                ClassMedicine classMedicine=medicineSnapshot.getValue(ClassMedicine.class);
                medicineList.add(classMedicine);
            }
            MedicineList adapter=new MedicineList(RetreiveActivity.this,medicineList);
            mylistView.setAdapter(adapter);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}

}

我保存数据的代码是

public class MedicineActivity extends AppCompatActivity {
EditText MedicineName,MedicineUsage;
TextView ExpiryDate;
Spinner spinnerSelectCompany;
Button MedicinesAddition;
DatabaseReference databaseMedicines;
DatePickerDialog datePickerDialog;
Calendar calendar;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_medicine);
    MedicineName= findViewById(R.id.edt_medicine_name);
    ExpiryDate= findViewById(R.id.tvtdate);
    ExpiryDate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            FunDate();
        }

        private void FunDate() {
            calendar= Calendar.getInstance();
            int mYear = calendar.get(Calendar.YEAR);
            int mMonth= calendar.get(Calendar.MONTH);
            int mDay= calendar.get(Calendar.DAY_OF_MONTH);
            datePickerDialog= new DatePickerDialog(MedicineActivity.this, R.style.DatPickerDialogTheme, new DatePickerDialog.OnDateSetListener() {
                @Override
                public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
                    ExpiryDate.setText(dayOfMonth +"-"+ (month+1) + "-"+year );


                }
            },mYear,mMonth,mDay);
            datePickerDialog.show();
        }
    });
    MedicineUsage= findViewById(R.id.usage);
    spinnerSelectCompany= findViewById(R.id.spinner_company_name);
    MedicinesAddition= findViewById(R.id.btn_add_medicines);
    databaseMedicines = FirebaseDatabase.getInstance().getReference("medicines");
    MedicinesAddition.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            FunAddMedicines();
        }
    });
}
private void FunAddMedicines(){
    String name=MedicineName.getText().toString().trim();
     String mediusage= MedicineUsage.getText().toString().trim();
    String medicinecompanies= spinnerSelectCompany.getSelectedItem().toString();
   String mediDate = ExpiryDate.getText().toString().trim();
    if (name.isEmpty() || mediusage.isEmpty() || medicinecompanies.isEmpty()  ){
        Toast.makeText(this, "Fill all above Fields", Toast.LENGTH_LONG).show();
    }
    else {

        String id = databaseMedicines.push().getKey();
        ClassMedicine classMedicine = new ClassMedicine(id,name,mediusage,medicinecompanies,mediDate);
        databaseMedicines.child(id).setValue(classMedicine);
        Toast.makeText(this, "Medicine Added", Toast.LENGTH_LONG).show();
    }

}

}

这是模型类

public class ClassMedicine {
String medicineId;
String medicineName;
String medicineUsage;
String medicineGenre;
String mediDate;

public ClassMedicine(){
}
public ClassMedicine(String medicineId, String medicineName, String medicineUsage, String medicineGenre,String mediDate) {
    this.medicineId = medicineId;
    this.medicineName = medicineName;
    this.mediDate= mediDate;
    this.medicineUsage = medicineUsage;
    this.medicineGenre = medicineGenre;
}

public String getMedicineId() {
    return medicineId;
}

public String getMedicineName() {
    return medicineName;
}

public String getMedicineUsage() {
    return medicineUsage;
}

public String getMedicineGenre() {
    return medicineGenre;
}
public String getMediDate() {
    return mediDate;
}

我想删除或删除卡片视图后面的数据 这个图片

标签: androidfirebaseandroid-layoutfirebase-realtime-database

解决方案


试试这个代码..

mFirebaseDatabase = mFirebaseInstance.getReference("usersDb/UserTable");


mFirebaseDatabase.child("User").removeValue();
            Toast.makeText(getApplicationContext(), "Delete Successfuly", Toast.LENGTH_SHORT).show();

在适配器中为点击事件添加接口..

 onItemClickListner onItemClickListner;

public void setOnItemClickListner(CommentsAdapter.onItemClickListner onItemClickListner) {
    this.onItemClickListner = onItemClickListner;
}

public interface onItemClickListner {
    void onClick(Contact contact);//pass your object types.
}
 @Override
public View getView(final int position, final View convertView, ViewGroup parent) {
    Contact contact=contactList.get(position);
    final LayoutInflater inflater = ((Activity) context).getLayoutInflater();
    final View outerContiner = inflater.inflate(R.layout.table_layout, parent, false);// define your layout
    TextView text = (TextView) outerContiner.findViewById(R.id.tlTvName);
    TextView barcode = (TextView) outerContiner.findViewById(R.id.tlTvBar);

    text.setText(data.get(position).itemName);
    barcode.setText(data.get(position).barcod);
    outerContiner.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            onItemClickListner.onClick(contact);
        }
    });
    return outerContiner;
}

在活动中将适配器绑定到列表视图中,然后调用此代码...

 adapter.setOnItemClickListner(new CommentsAdapter.onItemClickListner() {
        @Override
        public void onClick(Contact contact) {
            // here get id and remove into firebase datatabase.
            mFirebaseDatabase = mFirebaseInstance.getReference("usersDb/UserTable");


            mFirebaseDatabase.child("User").removeValue();
            Toast.makeText(getApplicationContext(), "Delete Successfuly", Toast.LENGTH_SHORT).show();


            adapter.notifyDataSetChanged();
        }
    });

推荐阅读