我正在使用Firebase进行一个项目,我以前从未使用过这个项目,而且我对Firebase本身几乎一无所知,因为我的团队的其他成员一直负责处理大部分交易。我正在为一些Excel数据编写解析器,我需要提取一些特定数据,然后将其上传到Firebase。解析已完成,但我无法将其写入Firebase。
我们在根数据库中有一个名为“系列”的子数据库,我需要将这些数据写入。我有一个名为RegistrationSheet的类,它包含此特定电子表格中的所有数据,这些数据分解为对象以表示JSON的结构。我知道您可以将自定义对象写入Firebase数据库,它将转换为表示该数据的JSON格式。我找到了一个页面,详细说明了可以写入数据库并转换为JSON的不同数据类型,其中包括Map和List。所以这里是我的代表“家庭”数据库的类。
RegistrationSheet.java:
public class RegistrationSheet {
public List<Object> families;
public void addFamily(Family f) { families.add(f); }
public RegistrationSheet() {
families = new ArrayList<>();
}
public void writeToFirebase() {
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("families");
ref.removeValue(); // Delete the data currently in the database so we can rewrite it.
ref.setValue(families);
}
public File outputJSON() {
return null;
}
}
Family.java:
public class Family {
public Map<String, Object> fields;
public void addField(String str, Object obj) { fields.put(str, obj); }
public Family() {
fields = new HashMap<>();
}
}
Child.java:
public class Child {
public Map<String, Object> fields;
public void addField(String str, Object obj) { fields.put(str, obj); }
public Child() {
fields = new HashMap<>();
}
}
族列表包含族对象,可以添加到Family对象中的Map的“字段”之一是子对象列表。我想因为这些都是有效写入Firebase的对象,只需在RegistrationSheet对象中编写“系列”列表即可:
public void writeToFirebase() {
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("families");
ref.removeValue(); // Delete the data currently in the database so we can rewrite it.
ref.setValue(families);
}
我的任何课程的结构是否有问题,或者我是如何将数据写入Firebase的?因为执行此操作后,“系列”子数据库将从Firebase中消失,我必须从备份中恢复它。看来我有正确的DatabaseReference,因为removeValue()似乎正在删除它,但为什么不从家庭列表中写入数据?
我很感激有人可以提供任何帮助。
答案 0 :(得分:2)
尝试以下代码。它给出了为什么它没有写出值的原因。
public void writeToFirebase() {
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("families");
ref.removeValue(); // Delete the data currently in the database so we can rewrite it.
ref.setValue(object, new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError databaseError, DatabaseReference reference) {
if (databaseError != null) {
Log.e(TAG, "Failed to write message", databaseError.toException());
}
}
});
}
然后,您可以根据生成的异常
调试代码