Комната Rxjava Single как Удалить ответ - PullRequest
0 голосов
/ 26 ноября 2018

Я сталкиваюсь с некоторыми проблемами с ошибками времени компиляции из Библиотеки комнат.

Я использую версию: 2.1.0-alpha02

Следующий Дао вызывает ошибку:

@Dao()
public interface WorkoutExerciseDao {

    [......]
    @Update()
    Single<Integer> updateWorkout(final WorkoutExercise... workoutExercises);


    @Delete
    Single<Integer> deleteWorkouts(final WorkoutExercise... user);

    @Query("DELETE FROM workout_exercise_table WHERE id  IN(:exerciseIds)")
    Single<Integer> deleteWorkouts(final long... exerciseIds);
}

В настоящее время первый аннотированный метод @Delete компилируется нормально и работает как положено.Если я добавлю второй (Удалить внутри метода запроса), он прервет компиляцию с ошибкой:

Методы удаления должны либо возвращать void, либо возвращать int (количество удаленных строк).

Я что-то здесь скучаю?

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Вам необходимо использовать AndroidX

Перенести проект на AndroidX. Сначала обратитесь к документации , простой способ - щелкнуть правой кнопкой мыши папку проекта и убедиться, чтонаходится в проектах перспектива, щелкните правой кнопкой мыши папку и выберите Refactor , и там должна быть опция " Перенос на AndroidX ".

enter image description here

После переноса вашего проекта на AndroidX теперь вы можете добавлять зависимости AndroidX в уровень вашего приложения.

implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version" // kapt for Kotlin
// optional - RxJava support for Room
implementation "androidx.room:room-rxjava2:$room_version"

См. документация для добавления последних версий зависимостей для Room.

0 голосов
/ 27 ноября 2018

Вы правы, и у меня была эта проблема.Я не знаю причину, но я знаю, что в последней версии комнаты нет способа справиться с этой проблемой, и когда вы используете запрос для DELETE, он говорит, что возвращаемый тип должен быть void или int, но если вы хотите использовать RXдля запроса DELETE вы можете сделать это, но, возможно, не лучшим образом: сначала конвертируйте interface в abstract class, а также все методы в abstract method, затем

@Dao
public abstract class WorkoutExerciseDao {

    @Update()
    abstract Single<Integer> updateWorkout(final WorkoutExercise... workoutExercises);

    @Delete
    abstract Single<Integer> deleteWorkouts(final WorkoutExercise... user);

    @Query("DELETE FROM workout_exercise_table WHERE id  IN(:exerciseIds)")
    abstract Integer deleteWorkouts(final long... exerciseIds);

    Single<Integer> deleteWorkoutsById(final long... exerciseIds) {
        return Single.create(emitter -> {
            emitter.onSuccess(deleteWorkouts(exerciseIds));
        });
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...