东风玖哥 2014-10-20 09:57 采纳率: 0%
浏览 3127

greendao多表互联的问题

//我想用这段代码把说说表以及图、文两个子表保存在数据库里
for(int i=0;i<mCirclePeer.size();i++)
{
mCirclePeerRecord = mCirclePeer.get(i);
mImage = mCirclePeerRecord.getImageList();
mContent = mCirclePeerRecord.getCharsList();
for(int j=0;j<mCirclePeerRecord.getImageList().size();j++)
{
mImage.get(j).setAnnID(mCirclePeerRecord.getAnnID());
DbService.getInstance(CirclePeerActivity.this).saveImage(mImage.get(j));
mCirclePeer.get(i).setImageList(mImage);
}
for(int j=0;j<mCirclePeerRecord.getCharsList().size();j++)
{
mContent.get(j).setAnnID(mCirclePeerRecord.getAnnID());
DbService.getInstance(CirclePeerActivity.this).saveContent(mContent.get(j));
mCirclePeer.get(i).setContentList(mContent);
}
DbService.getInstance(CirclePeerActivity.this).saveCirclePeer(mCirclePeer.get(i));
}
//在没有网络的时候用这段代码从数据库里读取保存的表
mCirclePeer = DbService.getInstance(this).loadAllCirclePeer();
for(int k=0;k<mCirclePeer.size();k++)
{
mImage = DbService.getInstance(this).loadImage();
mContent = DbService.getInstance(this).loadContent();
mCirclePeer.get(k).setImageList(mImage);
mCirclePeer.get(k).setContentList(mContent);
}
但是我没有得到预期效果,有人能帮我解答这个问题吗?

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-02 22:30
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    Greendao是一个Android框架,用于将Java对象映射到SQLite数据库。它提供了许多功能来处理嵌套的对象模型,包括关联关系。

    如果你想要在一个类中创建一个包含其他类的方法(例如,getImageList()getCharsList()),你可以这样做:

    public class CirclePeer {
        public List<Image> getImageList() {
            return imageList;
        }
        
        public void setImageList(List<Image> imageList) {
            this.imageList = imageList;
        }
    
        public List<Character> getCharsList() {
            return charsList;
        }
        
        public void setCharsList(List<Character> charsList) {
            this.charsList = charsList;
        }
    }
    

    然后,在另一个类中使用这些方法:

    public class Image {
        private int id;
        private String name;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    
    public class Character {
        private int id;
        private String name;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    

    这样,你就可以在你的类中定义这些方法了。

    关于如何处理嵌套的关系,你可以考虑使用Greendao提供的@OneToOne注解来实现一对一的关系。例如,如果你想为CirclePeer实体定义一对一的关系,可以这样做:

    @Entity(tableName = "circle_peers")
    public class CirclePeer extends DaoSession.CirclePeer implements OneToOneDao<CirclePeer, Image> {
        @Id(autoincrement = true)
        public int getId() {
            return mId;
        }
    
        @Column(name = "image_id")
        public int getImageId() {
            return mImageId;
        }
    
        @Column(name = "image_name")
        public String getImageName() {
            return mImageName;
        }
    
        @ManyToOne(OneToOneDao.class)
        @JoinColumn(name = "image_id", referencedColumnName = "id")
        public Image getImage() {
            return mImage;
        }
    
        @Override
        public void save(Image image) {
            mImage = image;
            super.save();
        }
    
        @Override
        public Image load(int id) throws SQLException {
            return super.load(id);
        }
    }
    

    注意:这只是一个示例,实际应用中可能需要根据实际情况进行调整。

    评论

报告相同问题?