Я пытаюсь обновить значение из моей таблицы, используя RX2 и комнату.
Мой предмет
@Entity(tableName = "myCustomTable")
public class MyItem {
@NonNull
@PrimaryKey
@ColumnInfo(name = "item_id")
@SerializedName("item_id")
private Long item_id;
@ColumnInfo(name = "name")
@SerializedName("name")
private String name;
@ColumnInfo(name = "country")
@SerializedName("country")
private String value;
@SerializedName("image")
@ColumnInfo(name = "image")
private String image;
@ColumnInfo(name = "latitude")
@SerializedName("latitude")
private Double latitude;
@ColumnInfo(name = "longitude")
@SerializedName("longitude")
private Double longitude;
@ColumnInfo(name = "valid")
private boolean valid;
public MyItem (Long item_id, String name, String value, String image, Double latitude, Double longitude, boolean valid) {
this.item_id = item_id;
this.name = name;
this.value = value;
this.image = image;
this.latitude = latitude;
this.longitude = longitude;
this.valid = true;
}
public boolean isValid() {
return valid;
}
public Long getItem_id() {
return item_id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public Double getLatitude() {
return latitude;
}
public Double getLongitude() {
return longitude;
}
}
Мой запрос таков:
@Dao
public interface CustomDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insertItem(MyItem item);
@Query("UPDATE myCustomTable SET valid = :isValid WHERE item_id= :id")
void flagQueued(long id, boolean isValid);
}
По умолчанию действительный - истина;
Это будет вызвано и преобразовано в завершаемую реализацией базы данных.
public class LocalDataSource implements DataSource {
private CustomDao customDao;
@Inject
public LocalPupilDataSource(CustomDao customDao) {
this.customDao = customDao;
}
public Completable flagQueued(long id) {
return Completable.fromAction(() -> customDao.flagQueued(id,false));
}
}
И, в конце концов, я вызываю подписчиком метод flagQueued. Этот подписчик сообщает об успешном завершении.
mCompositeDisposable.add(viewModel.deleteItem(id)
.subscribeOn(schedulerProvider.computation())
.observeOn(schedulerProvider.ui())
.subscribe(() -> Snackbar.make(getActivity().findViewById(R.id.main_layout),
R.string.user_removed, Snackbar.LENGTH_SHORT).show(), error -> Timber.e(error,error.getMessage()) ) );
К сожалению, значение не обновляется. Конечно, ID есть в таблице.
Любые советы будут высоко ценится.
item_id длинный? Может быть, вы сравниваете long с другим типом данных в своем запросе? Разместите класс MyItem, пожалуйста
Привет, @NicolaGallazzi. Просто обновил вопрос с классом Myitem
Это выглядит хорошо. Вы можете заглянуть внутрь своей базы данных с помощью этого инструмента sqlitebrowser.org. Используйте проводник файлов устройства в Android Studio и посмотрите data / data / yourapppackageid, чтобы найти базу данных.
Я думаю, что в имени таблицы @Entity (tableName = "myCustomTable") есть пробел. Вы можете это проверить?
Проверял это уже @AmitKumar. К сожалению, проблема не в этом.
Это действительно было успешным @pskink. Я не вижу видимой таблицы ни при предварительном просмотре, ни при выполнении команды select *. Это забавно, так как я на своем эмуляторе не в сети и беру данные из базы данных.
@pskink В базе данных не объявлена схема. Странный.
@pskink Я копирую путь к базе данных из эмулятора, открываю браузер sqlite, открываю новую базу данных, выбираю файл mytestDatabase.db и открываю его.
Нашел проблему. После нескольких часов отладки.
Значение по умолчанию, которое я присваиваю конструктору this.valid = true;
, по какой-то причине нарушило ЗАПРОС.
Таким образом, решение состоит в том, чтобы просто удалить значение ошибки и присвоить желаемое значение элементу, когда я собираюсь вставить его в таблицу.
Есть ли на GitHub репозиторий для комнаты, где я мог бы опубликовать проблему?
Это решение не сработало для меня, вставка работает нормально, но обновление не работает idk Y Это такая ужасная ошибка .. даже не вызывает никаких ошибок
Результат - 1 @pskink