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.
source to share
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
source to share