android - 从 Firebase 数据库中删除特定数据
问题描述
我正在开发一个 Android 应用程序,该应用程序将药物与到期日期一起存储,如下所示
完美存储的数据;现在我想做的是按日期删除特定数据。我是 Android 新手,搜索过视频,但我得到的教程似乎很难理解。我可以在 android 中查看来自 Firebase 的数据,但现在我想删除它。我已经在 Stack Overflow 上搜索了this和this
我检索数据的代码是
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;
}
解决方案
试试这个代码..
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();
}
});
推荐阅读
- javascript - 单击按钮时将组件添加到另一个组件
- f# - F# Async.Parallel |> Async.RunSynchronously 只使用八个 CPU 核心之一?
- python - 如何将词干应用到字典中?
- r - R:在情节图例中使用表达式
- apache - Silverstripe 3.4 - 前端工作正常,但从 /admin 和 /admin/pages 中删除了前导斜杠
- google-cloud-storage - GCP Storage API 使用 Java 1.6 上传文件
- django - Graphene-Django Relay 基于光标的分页不适用于动态数据
- javascript - 使用javascript的开始时间和结束时间的时间输入验证
- spring - spring eureka 客户端会向所有发现服务器发送心跳吗?
- android - NativeScript 中的 Socket.IO 后台模式