【问题标题】:Only some fields from Firebase are transferred to my code in Android Studio只有 Firebase 中的一些字段被传输到我在 Android Studio 中的代码
【发布时间】:2021-12-19 05:06:51
【问题描述】:

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

您能否帮我确定我的代码有什么问题以及我应该如何更改它以使其正常工作?

This is what my Firebase Database looks like

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

我尝试使用 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; }

}

请帮助我。谢谢!

【问题讨论】:

    标签: java android firebase google-cloud-platform google-cloud-firestore


    【解决方案1】:

    您正在从这些 getter 中返回 Object。你应该在这里返回String

    public Object getAmBusRoute() { return amBusRoute; }
    
    public Object getPmBusRoute() { return pmBusRoute; }
    

    【讨论】:

    • 如果这不能解决您的问题,请具体说明您的结果中缺少哪些字段。
    • Alex 的回答解决了我的问题,但这也是我错过的。谢谢!
    【解决方案2】:

    正如我在您的screenshot 中看到的,您正在使用 Firestore,但您的代码尝试从 Realtime Database 读取数据,这是不正确的。要解决此问题,您必须将 Firestore 添加到您的项目中。要做到这一点,请查看官方文档,了解如何get started with 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());
            }
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多