首页 > 解决方案 > 推送数据时 Firebase 实时数据库崩溃

问题描述

我想将新数据推送到我的 Firebase 数据库中的一个节点。直到两天前我都可以毫无问题地做到这一点。我做了一些改变,但不是在这堂课上。现在,当我尝试推送新数据时,我的应用程序崩溃了。我无法理解其中的原因。

public class MedicineUsageData {

    String companyName;
    String productName;
    String drugSubstance;
    String expireDate;
    String barcodeNum;
    String serialNum;
    String partyNum;
    String userName;
    String dosage;
    int userAge;


    public MedicineUsageData() {}

    public MedicineUsageData(String companyName, String productName, String drugSubstance, String expireDate, String barcodeNum, String serialNum, String partyNum, String userName, String dosage, int userAge) {
        this.companyName = companyName;
        this.productName = productName;
        this.drugSubstance = drugSubstance;
        this.expireDate = expireDate;
        this.barcodeNum = barcodeNum;
        this.serialNum = serialNum;
        this.partyNum = partyNum;
        this.userName = userName;
        this.dosage = dosage;
        this.userAge = userAge;
    }

    //getters and setters
}

我只将“剂量”值添加到我的数据类中。我尝试删除它,但它不能解决我的问题。

public class DatabaseManager {

    private DatabaseReference receiptDatabase;

    public DatabaseManager(){
        receiptDatabase = FirebaseDatabase.getInstance().getReference();
    }

    public DatabaseReference getReference(){ return receiptDatabase; }

    public void writeNewUser(String username, String email, String name, String surname, String passwordHash, String birthDate) {

        int age = StringOperations.getAge(birthDate);
        User user = new User(username, email, name, surname,passwordHash,birthDate,age);
        receiptDatabase.child("user").child(username).setValue(user);
    }

    public void writeNewMedicineUsage(Map<String, Object> medicineInfo, User user){

        MedicineUsageData medicineUsageData = new MedicineUsageData(Objects.requireNonNull(medicineInfo.get("companyName")).toString(), Objects.requireNonNull(medicineInfo.get("medicineName")).toString(), Objects.requireNonNull(medicineInfo.get("drugSubstance")).toString(), Objects.requireNonNull(medicineInfo.get("expireDate")).toString(), Objects.requireNonNull(medicineInfo.get("barcodeNumber")).toString(), Objects.requireNonNull(medicineInfo.get("serialNumber")).toString(), Objects.requireNonNull(medicineInfo.get("partyNumber")).toString(), user.getUserName(), Objects.requireNonNull(medicineInfo.get("dosage")).toString(), Objects.requireNonNull(user.getAge()));
        receiptDatabase.child("medicineUsageData").push().setValue(medicineUsageData);

    }
}

writeNewUser我班上的方法DatabaseManager效果很好。但该writeNewMedicineUsage方法不起作用。我检查了调试,所以我知道我的数据不为空。这种方法直到两天前才有效。正如我所说,我只是给它增加新的价值。我该如何解决这个问题?我检查了 Stackoverflow,但找不到这样的东西。

这是我的堆栈跟踪

2020-03-19 22:27:22.870 30076-30076/com.track.medicine E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.track.medicine, PID: 30076
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.track.medicine/com.track.medicine.MainScreenActivity}: com.google.firebase.database.DatabaseException: Found conflicting getters for name: getdrugSubstance
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2957)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032)
    at android.app.ActivityThread.-wrap11(Unknown Source:0)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
    at android.os.Handler.dispatchMessage(Handler.java:105)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6944)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
 Caused by: com.google.firebase.database.DatabaseException: Found conflicting getters for name: getdrugSubstance
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper$BeanMapper.<init>(com.google.firebase:firebase-database@@19.2.1:477)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.loadOrCreateBeanMapperForClass(com.google.firebase:firebase-database@@19.2.1:329)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.serialize(com.google.firebase:firebase-database@@19.2.1:166)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertToPlainJavaTypes(com.google.firebase:firebase-database@@19.2.1:60)
    at com.google.firebase.database.DatabaseReference.setValueInternal(com.google.firebase:firebase-database@@19.2.1:282)
    at com.google.firebase.database.DatabaseReference.setValue(com.google.firebase:firebase-database@@19.2.1:159)
    at com.track.medicine.DatabaseManager.writeNewMedicineUsage(DatabaseManager.java:29)
    at com.track.medicine.MainScreenActivity.onCreate(MainScreenActivity.java:74)
    at android.app.Activity.performCreate(Activity.java:7183)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2910)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032) 
    at android.app.ActivityThread.-wrap11(Unknown Source:0) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696) 
    at android.os.Handler.dispatchMessage(Handler.java:105) 
    at android.os.Looper.loop(Looper.java:164) 
    at android.app.ActivityThread.main(ActivityThread.java:6944) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374) 

标签: javaandroidfirebase-realtime-database

解决方案


推荐阅读