AzureMobileService: Inserting data into table throws an exception

I am new to implementing Azure Mobile Service. I am linking to the ToDoItem demo from Azure.

In the same way, I have a User class for my own application. Then I insert data into the MobileServiceTable, but it gives me an error like below:

{"message":"The operation failed with the following error: 'A null store-generated value was returned for a non-nullable member 'CreatedAt' of type 'CrazyLabApp.Models.User'.'."}

      

I have not created any field like this since it is not created in the ToDoItem demo. I saw that there are 4 default fields created by MobileServiceTable. createdAt is one of the fields of this.

I am wondering what I am doing wrong.

Check out my below Userclass:

   public class User {
    @com.google.gson.annotations.SerializedName("id")
    private String ServiceUserId;

    @com.google.gson.annotations.SerializedName("email")
    private String Email;

    @com.google.gson.annotations.SerializedName("firstname")
    private String FirstName;

    @com.google.gson.annotations.SerializedName("lastname")
    private String LastName;

    @com.google.gson.annotations.SerializedName("profilepic")
    private String ProfilePic;

    @com.google.gson.annotations.SerializedName("introduction")
    private String Introduction;

    @com.google.gson.annotations.SerializedName("website")
    private String Website;

    @com.google.gson.annotations.SerializedName("title")
    private String Title;

    @com.google.gson.annotations.SerializedName("_createdAt")
    private Date CreatedAt;

    @com.google.gson.annotations.SerializedName("coverimage")
    private ArrayList<CoverImage> CoverImages;

    /*public Date getCreatedAt() {
        return CreatedAt;
    }

    public void setCreatedAt(Date createdAt) {
        CreatedAt = createdAt;
    }*/

    @com.google.gson.annotations.SerializedName("followers")
    private ArrayList<User> Followers;

    @com.google.gson.annotations.SerializedName("likes")
    private ArrayList<Likes> Likes;

    @com.google.gson.annotations.SerializedName("collections")
    private ArrayList<Collections> Collections;

    @com.google.gson.annotations.SerializedName("comments")
    private ArrayList<Comments> Comments;

    @com.google.gson.annotations.SerializedName("stories")
    private ArrayList<Story> Stories ;




    //-------------- Methods
    public ArrayList<Story> getStories() {
        return Stories;
    }

    public void setStories(ArrayList<Story> stories) {
        Stories = stories;
    }

    public ArrayList<com.promact.crazylab.model.Comments> getComments() {
        return Comments;
    }

    public void setComments(ArrayList<com.promact.crazylab.model.Comments> comments) {
        Comments = comments;
    }

    public ArrayList<com.promact.crazylab.model.Collections> getCollections() {
        return Collections;
    }

    public void setCollections(ArrayList<com.promact.crazylab.model.Collections> collections) {
        Collections = collections;
    }

    public ArrayList<com.promact.crazylab.model.Likes> getLikes() {
        return Likes;
    }

    public void setLikes(ArrayList<com.promact.crazylab.model.Likes> likes) {
        Likes = likes;
    }

    public ArrayList<User> getFollowers() {
        return Followers;
    }

    public void setFollowers(ArrayList<User> followers) {
        Followers = followers;
    }

    public ArrayList<CoverImage> getCoverImages() {
        return CoverImages;
    }

    public void setCoverImages(ArrayList<CoverImage> coverImages) {
        CoverImages = coverImages;
    }

    public String getTitle() {
        return Title;
    }

    public void setTitle(String title) {
        Title = title;
    }

    public String getWebsite() {
        return Website;
    }

    public void setWebsite(String website) {
        Website = website;
    }

    public String getIntroduction() {
        return Introduction;
    }

    public void setIntroduction(String introduction) {
        Introduction = introduction;
    }

    public String getLastName() {
        return LastName;
    }

    public void setLastName(String lastName) {
        LastName = lastName;
    }

    public String getProfilePic() {
        return ProfilePic;
    }

    public void setProfilePic(String profilePic) {
        ProfilePic = profilePic;
    }

    public String getEmail() {
        return Email;
    }

    public void setEmail(String email) {
        Email = email;
    }

    public String getFirstName() {
        return FirstName;
    }

    public void setFirstName(String firstName) {
        FirstName = firstName;
    }

    public String getServiceUserId() {
        return ServiceUserId;
    }

    public void setServiceUserId(String serviceUserId) {
        ServiceUserId = serviceUserId;
    }

    @Override
    public boolean equals(Object o) {
        return o instanceof User && ((User) o).ServiceUserId == ServiceUserId;
    }

}

      

Also check the code below as I am pasting it:

final User u = new User();
u.setFirstName(mName);
u.setEmail(mEmail);
u.setProfilePic(mUrl);

mUserTable = mClient.getTable(User.class);

             // Insert the new item
             new AsyncTask<Void, Void, Void>(){
             @Override
             protected Void doInBackground(Void... params) {
                    try {
                           final User entity = mUserTable.insert(u).get();

                     } catch (Exception e){
                        //createAndShowDialog(e, "Error");
                        System.out.println("Error: "+e.toString());

                     }
             return null;
             }
     }.execute();

      

Please help me with this.

0


source to share


2 answers


The "_createdat" column will be automatically populated by Azure Mobile Services, so there is no need to include it in your model. Remove this property from the User class. Its presence is probably overwriting the autocomplete value with a null value.



+2


source


you can solve this problem simply by deleting the column createdAt

from the table user

in azure.

Why does this error happen:

I'm not sure. But I guess this error occurs because it createdAt

is a non-NULL member and you cannot leave it null.



EDIT:

Another aspect of system columns is that they cannot be sent by the client. For new tables (ie those that have row IDs), if the insert update request contains a property that starts with "__ (two underscores), the request will be rejected. However, the '__createdAt property can be set on the server script (although if you really don't want this column to represent the creation time of the object, you can use a different column for that) is one way this is (probably pretty weird) If you try to update the __updatedAt property, it won't work. but by default this column is updated with a SQL trigger, so any updates you make will be overridden anyway.

for more information see here: - http://blogs.msdn.com/b/carlosfigueira/archive/2013/11/23/new-tables-in-azure-mobile-services-string-id-system-properties -and-optimistic-concurrency.aspx

+1


source







All Articles