0

Я новичок в реализации Azure Mobile Service. Я ссылаюсь на демо ToDoItem от Azure.AzureMobileService: ввод данных в таблицу дает исключение

Таким же образом у меня есть класс User для моего собственного приложения. Тогда я вставляя данные в к MobileServiceTable, но он дает мне ошибку, как показано ниже:

{"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'.'."} 

Я не создали поле, как это, как он не будет создан в ToDoItem демо, а также. Я видел, что есть 4 поля по умолчанию, созданные MobileServiceTable. createdAt является одним из полей этого.

Мне интересно, что я делаю неправильно.

проверить мое ниже Класс_пользователей:

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; 
    } 

} 

Также проверьте ниже код, как я вставив его:

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(); 

Пожалуйста, помогите мне в этом.

ответ

2

Столбец «_createdat» будет заполняться автоматически Azure Mobile Services, так что нет необходимости включать его в модели. Удалите это свойство из класса User. Его присутствие, вероятно, переписывает значение автозаполнения с нулевым значением.

+0

@digiard, спасибо за ответ. Я удалил его из класса. Но все же он показывает ту же ошибку. –

1

Вы можете решить эту проблему, просто удалив createdAt столбец из вашего user стол в лазурном порядке.

Почему эта ошибка приходит:

Я не уверен, но я предполагаю, что эта ошибка приходит потому, что createdAt не является членом обнуляемым и вы не можете оставил его пустым.

EDIT:

Другой аспект системы колонок является то, что они не могут быть отправлены клиентом. Для новых таблиц (т. Е. Те, у которых есть идентификаторы строк), если вставка запроса на обновление содержит свойство, которое начинается с «__» (два символа подчеркивания), запрос будет отклонен. Однако свойство '__createdAt' может быть установлено в сценарии сервера (хотя, если вы действительно не хотите, чтобы этот столбец представлял время создания объекта, вы можете использовать для этого другой столбец) - один из способов, (довольно странный) сценарий. Если вы попытаетесь обновить свойство «__updatedAt», это не сработает, но по умолчанию этот столбец обновляется с помощью триггера SQL, поэтому любые обновления, которые вы ему делаете, в любом случае будут переопределены.

для получения дополнительной информации смотрите здесь: - http://blogs.msdn.com/b/carlosfigueira/archive/2013/11/23/new-tables-in-azure-mobile-services-string-id-system-properties-and-optimistic-concurrency.aspx

+0

, но мне нужна создана колонка. –

+0

, тогда я думаю, вы должны передать системное время на лазурную таблицу в правильном формате. или вы можете предоставить API для этого. –

+0

@iDroidExplorer взгляните на информацию о свойствах системы http://blogs.msdn.com/b/carlosfigueira/archive/2013/11/23/new-tables-in-azure-mobile-services-string-id- system-properties-and-optimistic-concurrency.aspx –

Смежные вопросы