我正在研究Android架构组件,特别是ROOM,但我是初学者,所以我正在尝试创建一个简单的应用程序来存储用户并在屏幕上显示用户名(用户可以只是代码中的测试不需要要创建的 UI)。
当我在 DB 上插入用户时出现错误,因为我无法在主线程上调用它,那么我可以在哪里调用它?我看到有些人使用 AsyncTask,但我认为这不是正确的方法或使用另一个库(如 RXjava),我看到有些人使用实时数据,但我不明白如何/在何处使用实时数据在 DB 上插入数据。这就是我所拥有的:
主要活动:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
usersViewModel = ViewModelProviders.of(this).get(UsersViewModel.class);
usersViewModel.getUsers();
User testUser = new User("Test");
usersViewModel.saveUser(testUser);
}
用户:
@Entity
public class User {
public @PrimaryKey(autoGenerate = true) int id;
public String name;
public User(String name) {
this.name = name;
}
//Gets and Sets
}
用户道:
public interface UserDao {
@Query("SELECT * FROM user")
LiveData<List<User>> getUsers();
@Insert
void insert(User user);
}
用户视图模型:
public class UsersViewModel extends AndroidViewModel {
private LiveData<List<User>> users;
private AppDatabase mDb;
public UsersViewModel(@NonNull Application application) {
super(application);
mDb = AppDatabase.getInMemoryDatabase(this.getApplication().getApplicationContext());
users = mDb.userModel().getUsers();
}
LiveData<List<User>>getUsers(){
return users;
}
void saveUser(User user) {
mDb.userModel().insert(user);
}
}