Firebase从DataSnapShot检索存储的ArrayList给出了NullPointerException

时间:2018-11-15 15:19:10

标签: java android firebase firebase-realtime-database

我的firebase数据库看起来像这样

Firebase Image

蓝色矩形是我要检索的数据。

蓝色矩形的模态类如下

public class TripToCompany implements Serializable {

String tripDate;
String companyName;
String vehicleNo;
boolean isFinished;
String firstPickUp;
String inTime;
ArrayList<EmpToCompany> emptoCompanyList;

public TripToCompany() {
}

public TripToCompany(String tripDate, String companyName, String vehicleNo, boolean isFinished, String firstPickUp, String inTime, ArrayList<EmpToCompany> emptoCompanyList) {
    this.tripDate = tripDate;
    this.companyName = companyName;
    this.vehicleNo = vehicleNo;
    this.isFinished = isFinished;
    this.firstPickUp = firstPickUp;
    this.inTime = inTime;
    this.emptoCompanyList = emptoCompanyList;
}

public TripToCompany(String tripDate, String companyName, String vehicleNo) {
    this.tripDate = tripDate;
    this.companyName = companyName;
    this.vehicleNo = vehicleNo;
    this.isFinished = false;
    this.inTime = "-";
    this.emptoCompanyList = new ArrayList<>();
}

public String getTripDate() {
    return tripDate;
}

public void setTripDate(String tripDate) {
    this.tripDate = tripDate;
}

public String getCompany() {
    return companyName;
}

public void setCompany(String companyName) {
    this.companyName = companyName;
}

public String getVehicleNo() {
    return vehicleNo;
}

public void setVehicleNo(String vehicleNo) {
    this.vehicleNo = vehicleNo;
}

public boolean isFinished() {
    return isFinished;
}

public void setFinished(boolean isFinished) {
    this.isFinished = isFinished;
}

public String getFirstPickUp() {
    return firstPickUp;
}

public void setFirstPickUp(String firstPickUp) {
    this.firstPickUp = firstPickUp;
}

public String getInTime() {
    return inTime;
}

public void setInTime(String inTime) {
    this.inTime = inTime;
}

public ArrayList<EmpToCompany> getEmptoCompanyList() {
    return emptoCompanyList;
}

public void setEmptoCompanyList(ArrayList<EmpToCompany> emptoCompanyList) {
    emptoCompanyList = emptoCompanyList;
}

public void addEmpToCompanyList(EmpToCompany etc) {
    if (emptoCompanyList.size() == 0) {
        firstPickUp = etc.getCabInTime();
    }
    emptoCompanyList.add(etc);

  }
}

我正在使用标准查询从firebase提取数据。这是代码

    FirebaseDatabase defaultDatabase = FirebaseDatabase.getInstance();
    DatabaseReference mRef = defaultDatabase.getReference("data");
    Query query = mRef.child("toComp/" + companyId + "/" + fromDate + "/" + shiftTimeId + "/");
    query.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot ds) {

            if (ds.exists()) {
                System.out.println("exist");
                for (DataSnapshot singleSnapshot : ds.getChildren()) {
                    TripToCompany trpObj = (TripToCompany) singleSnapshot.getValue(TripToCompany.class);
                    ArrayList<EmpToCompany>ee= trpObj.getEmptoCompanyList();
                    System.out.println("Company Name: "+trpObj.getCompany()); //successfully retrived
                    System.out.println("Employee Count: " + ee.size()); //unable to fetch it. Gives NullPointerException

                }
            } else {
                System.out.println("error");
            }
        }

        @Override
        public void onCancelled(DatabaseError de) {}
    });

我能够从Firebase成功获取剩余数据。红色矩形中的数据是ArrayList,我无法提取它(在图像中以红色矩形显示)。我已经使用 Sysout 在控制台中进行了打印,但无法获取ArrayList数据。它返回 NullPointerException 。如何在 TripToCompany 对象中获取该ArrayList?

1 个答案:

答案 0 :(得分:1)

要解决此问题,请更改以下代码行:

public void setEmptoCompanyList(ArrayList<EmpToCompany> emptoCompanyList) {
    emptoCompanyList = emptoCompanyList;
}

public void setEmptoCompanyList(ArrayList<EmpToCompany> emptoCompanyList) {
    this.emptoCompanyList = emptoCompanyList;
//    ^
}

您应该将本地emptoCompanyList变量的值分配给成员类(this)字段,而不是同一变量。

相关问题