gpt4 book ai didi

java - 使用 Firebase 将多行写入 Java 中的 CSV 文件

转载 作者:行者123 更新时间:2023-12-02 12:54:43 27 4
gpt4 key购买 nike

我一直在尝试(未成功)将从 Firebase 检索到的多行数据写入一个文件,然后将其上传到存储。我使用 this example 创建了一个 PrintWriter然后使用循环从我的 Firebase 数据库中的多个子项收集值。文件名具有 .csv 扩展名。

    public PrintWriter pw;   

...

File file = new File(this.getFilesDir(), filename);

pw = new PrintWriter(new BufferedWriter(new FileWriter(file, true)));

String columns = <COLUMNS>;
pw.write(columns);

patientRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot postSnapshot: snapshot.getChildren()) {
Object object = postSnapshot.getValue(Object.class);
String value1 = object.getValue1();
...
String row = value1 + ", " + value2 + ", "...;
pw.println(row);
}
}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});

pw.close();

从 Log 语句中,我可以看到我根据 onDataChanged() 中的值创建的字符串是正确的。我唯一的问题是它不会从循环写入文件。上传 CSV 文件后,文件中的唯一文本是列,以及下面的空格。

为什么没有附加行?

最佳答案

String columns = <COLUMNS>;
pw.write(columns);

patientRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot postSnapshot: snapshot.getChildren()) {
Object object = postSnapshot.getValue(Object.class);
String value1 = object.getValue1();
...
String row = value1 + ", " + value2 + ", "...;
pw.println(row);
}
}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});

pw.close();

您已向 PatientRef 添加了一些事件监听器,但这并不意味着 onDataChange(...) 已立即执行,它只是注册为监听器。添加它后,您关闭 PrintWriter,因此除了列之外不会写入任何内容,因为当执行 SingleValueEvent 时 pw 已经关闭。您需要在实际事件执行后或在事件内部关闭 pw。

关于java - 使用 Firebase 将多行写入 Java 中的 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44479217/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com