似乎无法将自定义对象写入Firebase数据库?

时间:2017-03-23 19:02:42

标签: java firebase firebase-realtime-database

我正在使用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()似乎正在删除它,但为什么不从家庭列表中写入数据?

我很感激有人可以提供任何帮助。

1 个答案:

答案 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());
            }
        }
    });
}

然后,您可以根据生成的异常

调试代码
相关问题