【问题标题】:Get the id of firebase data获取firebase数据的id
【发布时间】:2020-04-05 09:01:20
【问题描述】:

我使用ListView 来显示存储在 Firebase 数据库中的数据,当我长按列表项时,我想获取 Firebase 中列表项源的自动生成 ID,以便能够更新或删除数据通过获取 ID。

patientListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                Patient p = patientList.get(position);

                return false;
            }
        });

UPDATE:我用它来向我的数据库添加数据

try {
                    String name = mNameEditText.getText().toString().trim();
                    String phone = mPhoneEditText.getText().toString().trim();
                    String age = mAgeEditText.getText().toString().trim();
                    String aptDate = date();
                    String visitType = radioListener();

                    String gender = mGenderSpinner.getSelectedItem().toString();
                    String descCondition = mDescCondEditText.getText().toString().trim();


                    if (name.isEmpty()) {
                        mNameEditText.setError("Enter Your Name Please!");
                        mNameEditText.requestFocus();
                    } else if (phone.isEmpty()) {
                        mPhoneEditText.setError("Enter Your Phone");
                        mPhoneEditText.requestFocus();
                    } else if (age.isEmpty()) {
                        mAgeEditText.setError("Enter Your Age");
                        mAgeEditText.requestFocus();
                    } else if (aptDate.isEmpty()) {
                        dateEditText.setError("Please Enter Appointment Date");
                        dateEditText.requestFocus();
                    } else {

                        Patient appointment = new Patient(name, phone, age, descCondition, gender, aptDate, visitType);
                        mDatabaseRef.push().setValue(appointment);
                        successAlertDialog();
                        mNameEditText.setText("");
                        mPhoneEditText.setText("");
                        mAgeEditText.setText("");
                        dateEditText.setText("");
                        mGenderSpinner.setSelection(0);
                        mDescCondEditText.setText("");
                    }

这是我的模块类 包 com.sharhospital;

public class Patient {
    private String name;
    private String phone;
    private String age;
    private String describeCond;
    private String gender;
    private String date;
    private String typeOfVisit;
    private String docName;

    public Patient(String name, String phone, String age, String describeCond, String gender, String date, String typeOfVisit) {
        this.name = name;
        this.phone = phone;
        this.age = age;
        this.describeCond = describeCond;
        this.gender = gender;
        this.date = date;
        this.typeOfVisit = typeOfVisit;
    }

    public Patient(String name, String phone, String age, String describeCond, String gender, String date, String typeOfVisit, String docName) {
        this.name = name;
        this.phone = phone;
        this.age = age;
        this.describeCond = describeCond;
        this.gender = gender;
        this.date = date;
        this.typeOfVisit = typeOfVisit;
        this.docName = docName;
    }

    public Patient() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getDescribeCond() {
        return describeCond;
    }

    public void setDescribeCond(String describeCond) {
        this.describeCond = describeCond;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getTypeOfVisit() {
        return typeOfVisit;
    }

    public void setTypeOfVisit(String typeOfVisit) {
        this.typeOfVisit = typeOfVisit;
    }

    public String getDocName() {
        return docName;
    }

    public void setDocName(String docName) {
        this.docName = docName;
    }
}

修改后的onItemLongListerner

patientListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                Patient p = patientList.get(position);
                 String Id = p.getId();
             mDatabaseRef.child(Id).removeValue();
                return false;
            }
        });

向数据库发送数据

 String id = mDatabaseRef.push().getKey();
 Patient appointment = new Patient(id,name, phone, age, descCondition, gender, aptDate, visitType);
  mDatabaseRef.child(id).setValue(appointment);

【问题讨论】:

  • 在这里查看我的答案,它可能会对您有所帮助:stackoverflow.com/questions/60924912
  • 为什么不将自动生成的 id 存储为 Patient 类的属性?
  • @AlexMamo 可能是这样,但我仍然不知道如何实现这一目标
  • 当您将患者添加到数据库时,将推送的 id 存储到变量中。
  • @AlexMamo 如果你有代码示例,会很有帮助

标签: java android firebase listview firebase-realtime-database


【解决方案1】:

要解决这个问题,请将您的班级更改为:

public class Patient {
    private String id;
    private String name;
    private String phone;
    private String age;
    private String describeCond;
    private String gender;
    private String date;
    private String typeOfVisit;
    private String docName;

    public Patient(String id, String name, String phone, String age, String describeCond, String gender, String date, String typeOfVisit) {
        this.id = id;
        this.name = name;
        this.phone = phone;
        this.age = age;
        this.describeCond = describeCond;
        this.gender = gender;
        this.date = date;
        this.typeOfVisit = typeOfVisit;
    }

    public Patient(String id, String name, String phone, String age, String describeCond, String gender, String date, String typeOfVisit, String docName) {
        this.id = id;
        this.name = name;
        this.phone = phone;
        this.age = age;
        this.describeCond = describeCond;
        this.gender = gender;
        this.date = date;
        this.typeOfVisit = typeOfVisit;
        this.docName = docName;
    }

    public Patient() {
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getDescribeCond() {
        return describeCond;
    }

    public void setDescribeCond(String describeCond) {
        this.describeCond = describeCond;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getTypeOfVisit() {
        return typeOfVisit;
    }

    public void setTypeOfVisit(String typeOfVisit) {
        this.typeOfVisit = typeOfVisit;
    }

    public String getDocName() {
        return docName;
    }

    public void setDocName(String docName) {
        this.docName = docName;
    }
}

将数据添加到数据库时,请使用以下代码行:

String id = mDatabaseRef.push().getKey();
Patient appointment = new Patient(id, name, phone, age, descCondition, gender, aptDate, visitType);
mDatabaseRef.child(id).setValue(appointment);

现在,在onItemLongClick() 方法中:

patientListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
            Patient p = patientList.get(position);
            String id = p.getId();
            mDatabaseRef.child(id).removeValue(); //Remove that particular object
            return false;
        }
    });

附:这仅适用于新添加的对象,因为只有那些对象包含 id。

【讨论】:

  • String Id 为 null,也包含新添加的对象
  • 您是否删除了数据库中的所有数据并添加了一个新数据?一旦所有对象都包含 id,就不会出现 NullPointerException。这样做并告诉我它是否有效。
  • 是的,我删除了所有数据并添加了新数据
  • 向我展示你的新数据库架构和更改后的代码。
  • 请将它添加到您的问题中,以便我可以看到它的格式。按照之前的要求,还向我展示您的新数据库架构。
猜你喜欢
  • 1970-01-01
  • 2020-04-04
  • 1970-01-01
  • 2021-11-16
  • 2021-03-12
  • 2020-02-29
  • 2018-09-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多