Почему данные не вставляются в базу данных SQLite?(Номер + гй) - PullRequest
0 голосов
/ 12 июня 2019

Мне нужно вставить данные в базу данных с помощью такого инструмента, как Room. Вот как я это делаю:

Это мой DAO интерфейс

import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.OnConflictStrategy;
import androidx.room.Query;

import java.util.List;

import io.reactivex.Completable;
import io.reactivex.Observable;

@Dao
public interface MovieDao {

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    Completable insertMovie(final MovieEntity movie);

}

Вот метод, который должен добавить данные в БД:

@Override
public void addMovieToFavorites(@Nonnull Bundle bundle) {
    String url = bundle.getString(MovieListFragment.EXTRA_IMAGE);
    int watchers = bundle.getInt(MovieDetailActivity.EXTRA_WATCHERS);
    String name = bundle.getString(MovieDetailActivity.EXTRA_NAME);

    MovieDatabase database = TraktTvApp.getInstance().getDatabase();
    MovieDao movieDao = database.movieDao();
    MovieEntity movieEntity = new MovieEntity(name, watchers, url);

    mCompositeDisposable.add(Observable.fromCallable(() ->
            movieDao.insertMovie(movieEntity))
            .doOnSubscribe(disposable -> mView.showLoadingIndicator(true))
            .doOnError(throwable -> mView.onMovieDetailsFailed())
            .doOnComplete(() -> mView.onMoviesAdded())
            .doOnTerminate(() -> mView.showLoadingIndicator(false))
            .observeOn(Schedulers.io())
            .subscribe()
    );
}

Но, к сожалению, данные не добавляются в БД, как я вижу в Stetho. Так в чем же дело? Данные, которые я хочу добавить, не равны NULL, и при работе нет ошибок (так как вызывается метод onComplete). Поскольку я думаю, что есть проблема в логике rx, но я новичок в этом и не могу понять, почему моя проблема происходит

UPD

Я изменил логику rx следующим образом:

mCompositeDisposable.add(Observable.fromCallable(() -> movieDao.insertMovie(movieEntity))
        .subscribeOn(Schedulers.io())
        .doOnSubscribe(disposable -> mView.showLoadingIndicator(true))
        .observeOn(AndroidSchedulers.mainThread())
        .doOnError(throwable -> mView.onMovieDetailsFailed())
        .doOnComplete(() -> mView.onMoviesAdded())
        .doAfterTerminate(() -> mView.showLoadingIndicator(false))
        .subscribe()
);

Но все равно не работает

UPD 2

    mCompositeDisposable.add(movieDao.insertMovie(movieEntity)
            .subscribeOn(Schedulers.io())
            .doOnSubscribe(disposable -> mView.showLoadingIndicator(true))
            .observeOn(AndroidSchedulers.mainThread())
            .doOnError(throwable -> mView.onMovieDetailsFailed())
            .doOnComplete(() -> mView.onMoviesAdded())
            .doAfterTerminate(() -> mView.showLoadingIndicator(false))
            .subscribe()
    );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...