База данных номеров. Вставка прошла успешно, но данные не найденыJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 База данных номеров. Вставка прошла успешно, но данные не найдены

Сообщение Anonymous »

У меня есть простая настройка базы данных комнат, как показано ниже:
Класс объектов

Код: Выделить всё

@Entity
public class User {
@PrimaryKey
public int uid;

@ColumnInfo(name = "first_name")
public String firstName;

@ColumnInfo(name = "last_name")
public String lastName;

public User(int uid, String firstName, String lastName){
this.uid = uid;
this.firstName = firstName;
this.lastName = lastName;
}
}
Мой интерфейс Дао:

Код: Выделить всё

@Dao
public interface UserDao {

@Query("SELECT * FROM User")
Flowable getAlls();

@Insert
Completable addData(User modelClass);
}
Моя база данных:

Код: Выделить всё

@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {

private static AppDatabase instance;

static AppDatabase getDatabase(Context context) {
if (instance == null) {
instance = Room.databaseBuilder(context, AppDatabase.class, "your_db_name").createFromFile(new File("mypath")).build();
}
return instance;
}

public abstract UserDao userDao();
}
Наконец-то моя ViewModel:

Код: Выделить всё

public class RoomWithRxJavaViewModel extends AndroidViewModel {

private AppDatabase appDatabase;

public RoomWithRxJavaViewModel(@NonNull Application application) {
super(application);
appDatabase = AppDatabase.getDatabase(application);
}

public Flowable getList() {
return appDatabase.userDao().getAlls().subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread());
}

public Completable addData(User modelClass) {

return Completable.fromAction(() -> appDatabase.userDao().addData(modelClass))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}

}
И моя активность, где я печатаю результаты:

Код: Выделить всё

RoomWithRxJavaViewModel viewModel = new RoomWithRxJavaViewModel(this.getApplication());

Disposable disposable = viewModel.addData(new User(2, "btt", "bbb"))
.subscribe(
() -> { //onSucess
Toast.makeText(this, "Completed!", Toast.LENGTH_SHORT).show();
Disposable subscribe = viewModel.getList()
.subscribe(modelClasses ->
{
Toast.makeText(this, "RoomWithRx: " + modelClasses.size(), Toast.LENGTH_LONG).show();
}, e -> Toast.makeText(this, "Error: " + e.getMessage(), Toast.LENGTH_LONG).show());
}, //onError
throwable -> {
Toast.makeText(this, "Error!" + throwable.getMessage(), Toast.LENGTH_SHORT).show();
}
);
Как видно из кода, я сначала пытаюсь создать пользователя по умолчанию в своей базе данных.
Если вставка прошла успешно, а это потому, что я всегда ввожу функцию onSucess, я хочу проверить размер обновленной таблицы пользователей, и вот в чем загвоздка:
Независимо от того, как часто я вставляю пользователя с помощью кода, размер всегда остается 0.
Я что-то упускаю?

Подробнее здесь: https://stackoverflow.com/questions/660 ... data-found
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»