java - 推送数据时 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)
解决方案
推荐阅读
- javascript - 动画在预加载 CSS 和图像之前开始
- python - 在 sklearn 中使用 Leave-One-Out 交叉验证的 ROC 曲线
- docker - 如何在相同的heroku应用程序但不同的docker镜像中部署前端和后端
- c# - 我想将我的 Json 对象转换为自定义字符串以保存到数据库
- r - 将国家多边形添加到地图框
- python - 使用 kwargs(或 args)而不是简单的 dict 有什么好处?
- react-native - 如何在 redux 的动作上调用动作?
- c# - 将方法调用委托给另一个方法
- ruby - Cucumber ruby 如何使用 ParameterType 来转换给定的表达式?
- kotlin - BLE Advertise 数据大小限制