当我开始活动时,它显示错误:
类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) {
}
});
}
Artist.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;
}
}
答案 0 :(得分:3)
我认为错误是不言自明的。您只需要在Artist
类中添加一个空构造函数:
package com.rcpl.agni;
/**
* Created by Dell-pc on 23-01-2018.
*/
public class Artist {
String artistId;
String artistName;
String artistGenre;
public Artist(){}
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;
}
}
Firebase需要此构造函数才能在您调用artistSnapshot.getValue(Artist.class)
;
答案 1 :(得分:2)
要解决此问题,您只需将public no-argument constructor
添加到Artist
课程。
public Artist() {}
请记住,当Firebase Realtime Database SDK
反序列化来自数据库的对象时,它要求任何对象都具有公共无参数构造函数。这是实例化该特定对象所必需的。对象中的所有字段都是使用公共setter方法或直接访问公共成员来设置的。
如果您不使用公共的无参数构造函数,则SDK不知道如何创建该类的实例。大多数序列化库都有相同的要求。
答案 2 :(得分:0)