与领域的Firebase。反序列化POJO类 [英] Firebase with Realm. De-serializing POJO class
问题描述
错误:参数1的类型为io。我的firebase数据库中有数据,一切正常,直到我尝试反序列化数据。 realm.RealmList,得到java.util.ArrayList
这里是我的代码:
DatabaseReference root = FirebaseDatabase.getInstance()。
getReferenceFromUrl(https://swing-8792d.firebaseio.com/playlist);
查询playlistQuery = root.orderByKey()。equalTo(key);
playlistQuery.addListenerForSingleValueEvent(new ValueEventListener(){
@Override $ b $ public void onDataChange(DataSnapshot dataSnapshot){
for(DataSnapshot child:dataSnapshot.getChildren()){
Log.d(Child,child +);
Playlist receivedPlaylist = child.getValue(Playlist.class);
Playlist playlist = new Playlist ;
playlist.setCreatedBy(receivedPlaylist.getCreatedBy());
playlist.setName(receivedPlaylist.getName());
playlist.setMyMap(receivedPlaylist.getMyMap());
playlist.setQrKey(receivedPlaylist.getQrKey());
playlist.setCount(receivedPlaylist.getCount());
playlist.setId(receivedPlaylist.getId());
playlist .setTracks(receivedPlaylist.getTracks());
mPlaylist.add(播放列表);
$ b 这是我的POJO类:
@RealmClass
public class Playlist extends RealmObject {
String name;
长ID;
RealmList< Track>轨道;
整数;
字符串createdBy;
RealmList< UserMap> MYMAP;
字符串qrKey;
public RealmList< UserMap> getMyMap(){
返回myMap;
$ b $ public void setMyMap(RealmList< UserMap> myMap){
this.myMap = myMap;
$ b $ public播放列表(){}
$ b public String getQrKey(){
return qrKey;
}
public void setQrKey(String qrKey){
this.qrKey = qrKey;
}
public String getCreatedBy(){
return createdBy;
}
public void setCreatedBy(String createdBy){
this.createdBy = createdBy;
}
public RealmList< Track> getTracks(){
返回曲目;
public void setTracks(RealmList< Track> tracks){
this.tracks = tracks;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public Long getId(){
return id;
}
public void setId(Long id){
this.id = id;
}
public Integer getCount(){
return count;
}
public void setCount(Integer count){
this.count = count;
code
$ b $ p
$ b 如果我尝试使用普通的POJO类(即移除领域)进行反序列化,它就可以正常工作。 解决方案
Firebase不起作用类没有默认
构造函数或私有变量,即没有公共getter / setter。
更简单的解决方案你的情况将是一个中间件类是相同的pojo只是没有扩展RealmObject。接下来使用pojo的值初始化你的RealmObject子类。
伪代码
class SimplePojoPlaylist {
public String变量;
}
类播放列表扩展RealmObject {
public String variable;然后先投入 SimplePojoPlaylist $ c
$ b
(DataSnapshot child:dataSnapshot.getChildren()){
SimplePojoPlaylist receivedPlaylist = child.getValue(SimplePojoPlaylist());}
$ b
。类);
Playlist playList = new Playlist();
playList.variable = receivedPlaylist.variable;
}
I have data in my firebase DB, everything works fine until I try to De-serialize the data.
Error: argument 1 has type io.realm.RealmList, got java.util.ArrayList
Here's my code:
DatabaseReference root = FirebaseDatabase.getInstance().
getReferenceFromUrl("https://swing-8792d.firebaseio.com/playlist");
Query playlistQuery = root.orderByKey().equalTo(key);
playlistQuery.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot child : dataSnapshot.getChildren()) {
Log.d("Child", child + "");
Playlist receivedPlaylist = child.getValue(Playlist.class);
Playlist playlist = new Playlist();
playlist.setCreatedBy(receivedPlaylist.getCreatedBy());
playlist.setName(receivedPlaylist.getName());
playlist.setMyMap(receivedPlaylist.getMyMap());
playlist.setQrKey(receivedPlaylist.getQrKey());
playlist.setCount(receivedPlaylist.getCount());
playlist.setId(receivedPlaylist.getId());
playlist.setTracks(receivedPlaylist.getTracks());
mPlaylist.add(playlist);
}
This is my POJO class:
@RealmClass
public class Playlist extends RealmObject {
String name;
Long id;
RealmList<Track> tracks;
Integer count;
String createdBy;
RealmList<UserMap> myMap;
String qrKey;
public RealmList<UserMap> getMyMap() {
return myMap;
}
public void setMyMap(RealmList<UserMap> myMap) {
this.myMap = myMap;
}
public Playlist(){}
public String getQrKey() {
return qrKey;
}
public void setQrKey(String qrKey) {
this.qrKey = qrKey;
}
public String getCreatedBy() {
return createdBy;
}
public void setCreatedBy(String createdBy) {
this.createdBy = createdBy;
}
public RealmList<Track> getTracks() {
return tracks;
}
public void setTracks(RealmList<Track> tracks) {
this.tracks = tracks;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Integer getCount() {
return count;
}
public void setCount(Integer count) {
this.count = count;
}
}
If I try to de-serialize with Normal POJO class (i.e Removing Realm) it works fine.
Firebase won't work with classes that do not have default
constructor or private variables i.e no public getter/setter.
A easier solution in your case would be to make a middleware class that is the same pojo just not extending RealmObject. Next initialise your RealmObject subclass using the values of the pojo.
Pseudo code
class SimplePojoPlaylist {
public String variable;
}
class Playlist extends RealmObject {
public String variable;
}
Then first cast into SimplePojoPlaylist
for (DataSnapshot child : dataSnapshot.getChildren()) {
SimplePojoPlaylist receivedPlaylist = child.getValue(SimplePojoPlaylist.class);
Playlist playList = new Playlist();
playList.variable = receivedPlaylist.variable;
}
这篇关于与领域的Firebase。反序列化POJO类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!