com.google.firebase.database.DatabaseException

SHI*_*NEY 4 android firebase firebase-realtime-database

当我开始活动时,它显示错误:

类 com.rcpl.agni.Artist 未定义无参数构造函数。如果您使用 ProGuard,请确保这些构造函数未被剥离。

protected void onStart() {
        super.onStart();
        ref.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                //artistList.clear();
                for(DataSnapshot artistSnapshot : dataSnapshot.getChildren()){
                    Artist artist = artistSnapshot.getValue(Artist.class);
                    Toast.makeText(MainActivity.this, artist.getArtistName(), Toast.LENGTH_SHORT).show();

                }

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }
Run Code Online (Sandbox Code Playgroud)

艺术家.java

package com.rcpl.agni;

/**
 * Created by Dell-pc on 23-01-2018.
 */

public class Artist {
    String artistId;
    String artistName;
    String artistGenre;

    public Artist(String artistId, String artistName, String artistGenre) {
        this.artistId = artistId;
        this.artistName = artistName;
        this.artistGenre = artistGenre;
    }

    public String getArtistId() {
        return artistId;
    }

    public String getArtistName() {
        return artistName;
    }

    public String getArtistGenre() {
        return artistGenre;
    }
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*amo 9

要解决这个问题,您只需要将public no-argument constructor加到您的Artist班级中。

public Artist() {}
Run Code Online (Sandbox Code Playgroud)

请记住,当 Firebase 实时数据库 SDK 反序列化来自数据库的对象时,它要求任何对象都具有公共无参数构造函数。这是实例化该特定对象所必需的。对象内的所有字段都是通过使用公共设置方法或直接访问公共成员来设置的。

如果您不使用公共无参数构造函数,则 SDK 不知道如何创建类的实例。大多数序列化库都有相同的要求。