Проблема с идентификатором Gson и Room в android (отправка json клиенту) - PullRequest
3 голосов
/ 27 января 2020

У меня проблема с Gson и Room с id! Я отправляю данные с json (библиотеки Gson и JSON) клиенту (Android приложение) с реализацией базы данных Room, я отправляю данные клиента на android с идентификаторами, похожими на:

{"map":{"date":"2020-01-15 15:13:42.0","botType":1,"botName":"ds","id":62,"userId":1,"accountKey":"dcab171a-b6cc-4583-b5fc-3e996100725a","status":0}}

и мне нужно сохранить точно сохранить с идентификатором в клиентской базе данных, но комната генерирует новый идентификатор для этого объекта, что я могу исправить эту проблему? другое описание о структуре:

суперкласс:

@Entity
public class SuperBean implements Serializable {
 @PrimaryKey(autoGenerate = true)
 public long id;
 @TypeConverters(DateConverter.class)
 public Date date = new Date();

 public long getId() {
     return id;
 }

 public void setId(long id) {
     this.id = id;
 }

 public Date getDate() {
     return date;
 }

 public void setDate(Date date) {
     this.date = date;
 }
}

И основной класс для сохранения в базе данных:

@Entity
public class Account extends SuperBean {
//other var...
}

Комнатная вставка DAO:

 @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertFromServer(Account account);

Я использую JSON, чтобы сохранить данные в базе данных комнаты с идентификатором сохранения, и перед этим я очищаю таблицу счетов, но необходимо добавить сохраненный объект с идентификатором, который, по мнению комнаты, должен быть добавлен.

1 Ответ

2 голосов
/ 27 января 2020

Опция - 1: Удалить autoGenerate = true из id в вашей SuperBean сущности

@Entity
public class SuperBean implements Serializable {
    @PrimaryKey
    public long id;

    ...
}

Опция - 2: Использовать другую переменную, например _id для autoGenerate и оставьте желаемое id таким же, как в вашей SuperBean сущности

@Entity
public class SuperBean implements Serializable {
    @PrimaryKey(autoGenerate = true)
    public long _id;

    public long id;

    ...
}
...