从onDataChange获取数据

时间:2018-10-04 00:33:30

标签: android firebase firebase-realtime-database

我需要将数据从Firebase返回到Java对象,但是即使使用接口,它也总是返回null。有帮助吗?

我在方法内部创建了一个“坐标”对象,并试图像这样访问数据:readData(value -> coordinates = value , offer);

public interface CoordinatesCallback {
    void onCallBack(Coordinates value);
}

public void readData(CoordinatesCallback callback, Offer offer) {
    String storeId = Integer.toString(offer.getStore().getId());

    mDatabase.child("stores").child(storeId).child("coordinates").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            Coordinates coordinates = dataSnapshot.getValue(Coordinates.class);

            callback.onCallBack(coordinates);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}

1 个答案:

答案 0 :(得分:1)

getValue()的工作方式不是这样。您必须为您要读取的数据库的每个字段传递带有getter和setter的Java POJO的Class对象。从链接的Javadoc中:

  

此方法用于编组此快照中包含的数据   进入您选择的课程。该课程必须适合2个简单   约束:

     
      
  1. 该类必须具有不带参数的默认构造函数
  2.   
  3. 该类必须为要分配的属性定义公共获取方法。没有公共获取者的属性将设置为   实例反序列化时的默认值
  4.