繁体   English   中英

如何正确查询房间数据库

[英]How do i properly query a room database

所以我有一个我试图查询的数据库,但是当我的活动调用查询方法时,我不断得到 null 对象

这是锻炼 Class

@Entity(tableName = "workout_table")
public class Workout {

@PrimaryKey
@NonNull
private String name;


@ColumnInfo(name = "number_of_sets")
private int numOfSets;

@ColumnInfo(name = "workout_duration")
private int workDuration;

@ColumnInfo(name = "rest_duration")
private int restDuration;

@ColumnInfo(name = "selected_workout")
private boolean seletectedWorkout;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public int getNumOfSets() {
    return numOfSets;
}

public void setNumOfSets(int numOfSets) {
    this.numOfSets = numOfSets;
}

public int getWorkDuration() {
    return workDuration;
}

public void setWorkDuration(int workDuration) {
    this.workDuration = workDuration;
}

public int getRestDuration() {
    return restDuration;
}



public void setRestDuration(int restDuration) {
    this.restDuration = restDuration;
}

public boolean isSeletectedWorkout() {
    return seletectedWorkout;
}

public void setSeletectedWorkout(boolean seletectedWorkout) {
    this.seletectedWorkout = seletectedWorkout;
}

public Workout(String name, int numOfSets, int workDuration, int restDuration) {
    this.name = name;
    this.numOfSets = numOfSets;
    this.workDuration = workDuration;
    this.restDuration = restDuration;
}
public Workout(String name, int numOfSets, int workDuration, int restDuration, boolean 
selectedWorkout) {
    this.name = name;
    this.numOfSets = numOfSets;
    this.workDuration = workDuration;
    this.restDuration = restDuration;
    this.seletectedWorkout = selectedWorkout;
}
}

这是我 DAO

@Dao
public interface WorkoutDao {
@Insert(onConflict = OnConflictStrategy.IGNORE)
void insert(Workout workout);

@Delete
void delete(Workout workout);

@Query("select * from workout_table order by name ASC")
LiveData<List<Workout>> getAlphabetizedWorkouts();

@Query("select * from workout_table where selected_workout")
LiveData<Workout> getSelectedWorkout();
}

这是存储库

public class WorkoutRepository {
private WorkoutDao mWorkoutDao;

private LiveData<List<Workout>> mAllWorkouts;
private LiveData<Workout> mSelectedWorkout;
private static volatile WorkoutRepository sInstance = null;


WorkoutRepository(Application application) {
    WorkoutRoomDatabase db = WorkoutRoomDatabase.getDatabase(application);
    mWorkoutDao = db.workoutDao();
    mAllWorkouts = mWorkoutDao.getAlphabetizedWorkouts();
}

LiveData<List<Workout>> getAllWorkouts() {
    return mAllWorkouts;
}

LiveData<Workout> getSelectedWorkout() {
    return mSelectedWorkout;
}

void insert(Workout workout) {
    WorkoutRoomDatabase.databaseWriteExecutor.execute(() -> {
        mWorkoutDao.insert(workout);
    });

}
}

这是 MainActivity class 字段

 private MainActivityViewModel mMainActivityViewModel;
 private LiveData<Workout> defaultWorkout;

这是方法调用所在的 MainActivity onCreate

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mCountDown = findViewById(R.id.main_countdown);

    mButtonStartPause = findViewById(R.id.button_start_pause);
    mButtonReset = findViewById(R.id.button_reset);
    mNewWorkout = findViewById(R.id.new_workout);
    mWorkouts = findViewById(R.id.my_workouts);
    mWorkRestLabel = findViewById(R.id.work_rest_label);

    mMainActivityViewModel = new ViewModelProvider(this).get(MainActivityViewModel.class);
    defaultWorkout = mMainActivityViewModel.getSelectedWorkout();

    //set up the workout parameters
    mNumberOfSets = defaultWorkout.getValue().getNumOfSets();
    mWorkoutDuration = (int) (defaultWorkout.getValue().getWorkDuration())* 1000;
    mRestDuration = (int) (defaultWorkout.getValue().getRestDuration()) * 1000;
    }

每次我从 MainActivity 调用 getSelectedworkout 时,我都会得到一个 null 指针异常是方法调用或查询有问题吗?

在您的Dao中,最后一个方法getSelectedWorkout()应更改如下:

@Query("select * from workout_table where selected_workout= :workout")
LiveData<Workout> getSelectedWorkout(int workout);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM