监听room数据库更新
时间: 2023-12-14 16:30:27 浏览: 31
要监听room数据库更新,可以使用Room的LiveData和Observer。具体步骤如下:
1. 在DAO中定义一个返回LiveData的查询方法,例如:
```
@Query("SELECT * FROM room_table WHERE id = :id")
LiveData<RoomEntity> getRoomById(int id);
```
2. 在ViewModel中获取LiveData对象,并在构造函数中初始化Observer,例如:
```
public class RoomViewModel extends ViewModel {
private LiveData<RoomEntity> mRoom;
public RoomViewModel(RoomDatabase database, int roomId) {
mRoom = database.roomDao().getRoomById(roomId);
mRoom.observeForever(new Observer<RoomEntity>() {
@Override
public void onChanged(RoomEntity roomEntity) {
// 数据库更新时会回调该方法
}
});
}
public LiveData<RoomEntity> getRoom() {
return mRoom;
}
}
```
3. 在Activity或Fragment中获取ViewModel对象,并观察LiveData对象,例如:
```
public class RoomActivity extends AppCompatActivity {
private RoomViewModel mViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_room);
int roomId = getIntent().getIntExtra("room_id", 0);
RoomDatabase database = Room.databaseBuilder(getApplicationContext(),
RoomDatabase.class, "room_database").build();
mViewModel = new ViewModelProvider(this, new ViewModelProvider.NewInstanceFactory() {
@NonNull
@Override
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
return (T) new RoomViewModel(database, roomId);
}
}).get(RoomViewModel.class);
mViewModel.getRoom().observe(this, new Observer<RoomEntity>() {
@Override
public void onChanged(RoomEntity roomEntity) {
// 数据库更新时会回调该方法
}
});
}
}
```