与领域的Firebase。反序列化POJO类 [英] Firebase with Realm. De-serializing POJO class

查看:139
本文介绍了与领域的Firebase。反序列化POJO类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



错误:参数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 $ 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆