Search code examples
androidsugarorm

Sugar ORM doesnt store data


I am using Sugar ORM 1.3.1 and i am trying to save the following objects

   public class Article extends SugarRecord<Article> implements Serializable {
    @JsonProperty("Categories")
    private List<Category> categories = new ArrayList<Category>();
    @JsonProperty("Contents")
    private List<Content> contents = new ArrayList<Content>();
    @JsonProperty("Country")
    private CountryRelated country;
    @JsonProperty("Description")
    private String description;
    @JsonProperty("ExpiryDate")
    private String expiryDate;
    @JsonProperty("ExtraFields")
    private List<ExtraField> extraFields = new ArrayList<ExtraField>();
    @JsonProperty("Identifier")
    private int identifier;
    @JsonProperty("ImageURL")
    private String imageURL;
    @JsonProperty("Name")
    private String name;
    @JsonProperty("PortalID")
    private int portalID;
    @JsonProperty("PublishDate")
    private String publishDate;
    @JsonProperty("Region")
    private Region region;
    @JsonProperty("Related")
    private List<Related> related = new ArrayList<Related>();
    @JsonProperty("Newsbite")
    private boolean newsbite;
    @JsonProperty("ShareURL")
    private String shareURL;
    @JsonProperty("Tags")
    private List<Tag> tags = new ArrayList<Tag>();
    @JsonProperty("Type")
    private int type;
    public Article() {
    }


    public Article(List<Category> categories, List<Content> contents, List<ExtraField> extraFields, CountryRelated country, String description, String expiryDate, int identifier, String imageURL, String name, boolean newsbite, int portalID, String publishDate, Region region, List<Related> related, String shareURL, List<Tag> tags, int type) {
        this.categories = categories;
        this.contents = contents;
        this.extraFields = extraFields;
        this.country = country;
        this.description = description;
        this.expiryDate = expiryDate;
        this.identifier = identifier;
        this.imageURL = imageURL;
        this.name = name;
        this.newsbite = newsbite;
        this.portalID = portalID;
        this.publishDate = publishDate;
        this.region = region;
        this.related = related;
        this.shareURL = shareURL;
        this.tags = tags;
        this.type = type;
    }

    public List<Category> getCategories() {
        return categories;
    }

    public void setCategories(List<Category> categories) {
        this.categories = categories;
    }

    public List<Content> getContents() {
        return contents;
    }

    public void setContents(List<Content> contents) {
        this.contents = contents;
    }

    public List<ExtraField> getExtraFields() {
        return extraFields;
    }

    public void setExtraFields(List<ExtraField> extraFields) {
        this.extraFields = extraFields;
    }

    public CountryRelated getCountry() {
        return country;
    }

    public void setCountry(CountryRelated country) {
        this.country = country;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getExpiryDate() {
        return expiryDate;
    }

    public void setExpiryDate(String expiryDate) {
        this.expiryDate = expiryDate;
    }

    public int getIdentifier() {
        return identifier;
    }

    public void setIdentifier(int identifier) {
        this.identifier = identifier;
    }

    public String getImageURL() {
        return imageURL;
    }

    public void setImageURL(String imageURL) {
        this.imageURL = imageURL;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public boolean isNewsbite() {
        return newsbite;
    }

    public void setNewsbite(boolean newsbite) {
        this.newsbite = newsbite;
    }

    public int getPortalID() {
        return portalID;
    }

    public void setPortalID(int portalID) {
        this.portalID = portalID;
    }

    public String getPublishDate() {
        return publishDate;
    }

    public void setPublishDate(String publishDate) {
        this.publishDate = publishDate;
    }

    public Region getRegion() {
        return region;
    }

    public void setRegion(Region region) {
        this.region = region;
    }

    public List<Related> getRelated() {
        return related;
    }

    public void setRelated(List<Related> related) {
        this.related = related;
    }

    public String getShareURL() {
        return shareURL;
    }

    public void setShareURL(String shareURL) {
        this.shareURL = shareURL;
    }

    public List<Tag> getTags() {
        return tags;
    }

    public void setTags(List<Tag> tags) {
        this.tags = tags;
    }

    public int getType() {
        return type;
    }

    public void setType(int type) {
        this.type = type;
    }
}

Category.class

public class Category extends SugarRecord<Category> implements Serializable {
    @JsonProperty("Identifier")
    private int identifier;
    @JsonProperty("Name")
    private String name;
public constructor + getters and setters }

Content.class and CountryRelated.class have same structure

after i do article.save() my lists doesnt save . Am i doing something wrong or it doesnt save lists at all ???


Solution

  • I few things to look at.

    First. I do not believe that the database will handle a column with the type of List or a type of other Object. When I tried running your code, I received:

    Class cannot be read from Sqlite3 database. Please check the type of field categories(java.util.List)
    

    These should be types the database can store. Try serializing your List(s) to Strings to insert them in the db. You can try doing this in your getter and setter. The setter takes the list of objects and converts it to a serialized String, the getter takes the serialized String and converts it back to a list of objects.

    In the instance of SugarOrm, you can reference another table and it will create a relationship outlined here:

    http://satyan.github.io/sugar/creation.html#why

    Notice the "Author" type is just referencing a record from another table in the database.

    Second I usually try and set my default values inside my default constructor. so something like:

    ... property declarations...
    
    public Article() {
        this.name = "Default Value";
    }
    

    Hope this helps you finish troublshooting!