首页 > 解决方案 > 只有 Firebase 中的一些字段被传输到我在 Android Studio 中的代码

问题描述

我花了几个小时试图弄清楚为什么 Firestore 中文档中的某些字段不会转移到我的代码中。

你能帮我找出我的代码有什么问题以及我应该如何更改它以使其工作吗?

这就是我的 Firebase 数据库的样子

(是的,公交车号特意保存为字符串)

我试图使用 getValue 方法从 Firebase 读取数据,如下面的代码所示:

    DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("BusDrivers");

  // Getting all of the registered bus drivers' information
    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot datasnapshot) {
            for (DataSnapshot snapshot : datasnapshot.getChildren()) {
                BusDriver busDriver = snapshot.getValue(BusDriver.class);
                busDrivers.add(busDriver);
            }
        }

但是,只有部分字段被传输到 busDriver 对象。当我打电话时busDriver.getDriverFirstName(),我准确地得到了一个结果......

唐在叫司机的名字后被退回

但是当我调用 busDriver.getAmBusRoute() 时,出于某种原因我得到了这个......

不适用

这里也是 BusDriver 类的代码。

public class BusDriver {
private final String busDriverID;
private final String amBusRoute;
private final String pmBusRoute;
private final String driverFirstName;
private final String driverMiddleName;
private final String driverLastName;

public BusDriver() {
    this.busDriverID = "N/A";
    this.amBusRoute = "N/A";
    this.pmBusRoute = "N/A";
    this.driverFirstName = "N/A";
    this.driverMiddleName = "N/A";
    this.driverLastName = "N/A";
}

public BusDriver(String busDriverID, String amBusRoute, String pmBusRoute, String driverFirstName, String driverMiddleName,
                 String driverLastName) {
    this.busDriverID = busDriverID;
    this.amBusRoute = amBusRoute;
    this.pmBusRoute = pmBusRoute;
    this.driverFirstName = driverFirstName;
    this.driverMiddleName = driverMiddleName;
    this.driverLastName = driverLastName;
}

public String getBusDriverID() { return busDriverID; }

public Object getAmBusRoute() { return amBusRoute; }

public Object getPmBusRoute() { return pmBusRoute; }

public String getDriverFirstName() { return driverFirstName; }

public String getDriverMiddleName() { return driverMiddleName; }

public String getDriverLastName() { return driverLastName; }

}

请帮我。谢谢!

标签: javaandroidfirebasegoogle-cloud-platformgoogle-cloud-firestore

解决方案


正如我在您的屏幕截图中看到的,您正在使用 Firestore,但您的代码尝试从实时数据库中读取数据,这是不正确的。要解决此问题,您必须将 Firestore 添加到您的项目中。为此,请查看有关如何开始使用 Cloud Firestore的官方文档。

在你这样做之后,要读取数据,你可以使用以下代码:

FirebaseFirestore db = FirebaseFirestore.getInstance();
CollectionReference busDriversRef = db.collection("BusDrivers");
busDriversRef..get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        if (task.isSuccessful()) {
            for (QueryDocumentSnapshot document : task.getResult()) {
                BusDriver busDriver = document.toObject(BusDriver.class);
                busDrivers.add(busDriver);
            }
        } else {
            Log.d(TAG, "Error getting documents: ", task.getException());
        }
    }
});

推荐阅读