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

Форум для тех, кто программирует под Android
Ответить
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 МБ.

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