当前位置: 首页 > 知识库问答 >
问题:

将DataSnapshot转换为类对象

潘宪
2023-03-14

我是Firebase数据库的新手,我正在遵循谷歌的文档从我的数据库中检索数据。
我有这样的结构:

root/
|
|--- 82JWZZZd***
|    |
|    |--- profile
|         |
|         |--- id: 1
|         |--- name: Arnold Schwarzenegger
|         |--- age: 70
|
|--- GB3FDPiw***
     |
     |--- profile
          |
          |--- id: 1
          |--- name: Sylvester Stallone 
          |--- age: 71
public class Profile{
    private int id;
    private String name;
    private int age;

    public Profile(){
        // Default constructor required for calls to DataSnapshot.getValue(User.class)
    }

    public Profile(int id, String name, int age){
        this.id = id;
        this.name = name;
        this.age = age;
    }
}
DatabaseReference reference = FirebaseDatabase.getInstance().getReference(getUid() + "/profile");
reference.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if (dataSnapshot.exists()){
            Toast.makeText(getContext(), "" + dataSnapshot.getValue(),
                    Toast.LENGTH_LONG).show();
            // Profile prf = dataSnapshot.getValue(Profile.class);
        }
    }
    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});
Profile prf = dataSnapshot.getValue(Profile.class);

我的应用程序崩溃

我不明白与谷歌文档的区别。有人能帮帮我吗?我太纠结了!

错误是:

com.google.firebase.database.DatabaseException: Class com.companyname.myApp.FirstFragment$Profile is missing a constructor with no arguments

共有1个答案

沃念
2023-03-14

如果您有私有字段,则需要添加getter和setter。如果不需要setter和getter,请使用公共字段。

此外,由于配置文件类嵌套在片段中,因此需要将其标记为static。So公共静态类配置文件{。还请参阅GitHub上的以下注释:https://github.com/firebase/firebaseui-android/issues/46#issuecomment-167373575

 类似资料:
  • 我理解超类/子类之间的关系以及强制转换是如何工作的。但是,我的问题是,如果知道中间有一个类,你能把一个超类转换成一个特定的子类吗?例如,如果我有一个动物类对象包含一个BigDog对象,我可以将该对象强制转换为Dog吗?如果BigDog中有Dog中不存在的方法怎么办? 简而言之,你当然可以说超类对象是子类对象,但为什么你可以反转呢? 转念一想, Java在调用方法时检查的是:引用(DOG)是否有引用

  • 例如:Date值为:“dateCollected”:fri Jul 07 00:00:00 IST 1989, 但它只服用星期五而不是整个日期。

  • 问题内容: 我有一些这样的代码。 超级班 子类 所以问题是我可以将超类的对象转换为子类吗?这个问题对我来说是正确的吗? 但它给Class Cast异常。 问题答案: 您可以将子类转换为超级类,反之亦然。如果“车辆”是“超级类”,而“汽车”是子类,则所有“汽车”(子代)都是“汽车”(“超级”),但并非所有“车辆”都是“汽车”。

  • 问题内容: 好吧,如果我有这段代码 一切正常,但是 运行后给出以下错误(Eclipse没有给出任何错误) 虽然,当我这样做 要么 再没有错了。 为什么必须将其首先转换? 问题答案: 声明对象时,可以通过检查对象是否实际上已强制转换为实例来判断。由于取消装箱约定,可以再次将其强制转换为。之后,该值可以转换为。 但是,没有从Double实例转换为的取消装箱约定,因此,如果您尝试这样做,则运行时将发出。

  • 首先,我是SpringWebFlux的新手,正在尝试建立一个反应式spring启动项目的POC。我有一个用例,需要将检索到的实体类(PartyDTO)转换为Mono对象(Person:这是一个没有构造函数的第三方业务对象,我无法修改它)。我在谷歌上搜索,但找不到与我的用例相匹配的答案。 第三方对象: 我的课程如下: 调用我的存储库的服务类。 如上图所示,我尝试将平面图与我的自定义映射器一起使用,但

  • 问题内容: 我有2个类,分别称为超类和子类,我试图将子类对象转换为超类,但是当我想使用超类的子类对象时,它似乎不起作用。请帮忙解释。谢谢。这些是代码: 当我尝试使用子类的displaySub()时出现错误 问题答案: 超类不能知道子类方法。 这样考虑: 你有超一流的 你有两个子类,即:, 两个子类将具有相同的特征,例如 该超意识到这些,因为所有S能说话(即使它不知道此操作的确切机制) 一但可以做的