如果没有数据,如何使用 API 响应更新 Room DB?

How update Room DB with API response if there is not data?

如果我的数据库 table 是空的并且 return 到我的 recyclerview

,我正在尝试用我的呼叫 api 的响应更新我的数据库(房间)

API

@GET("user/patient/")
Flowable<ResponsePatient> getPatients(@Header("Authorization") String userToken);

FactoryData.class

public Flowable<List<Patient>> getPatientFromApi(){
    String token = preferences.getValue(SDConstants.token);
    return apiNetwork.getPatients(token).map(new Function<ResponsePatient, List<Patient>>() {
        @Override
        public List<Patient> apply(ResponsePatient responsePatient) throws Exception {
            return PatientMapper.transform(responsePatient);
        }
    });
}


public Flowable<List<Patient>> listPatient(){

      return appDataBase.patientDao().listPatient()
            .switchIfEmpty(getPatientFromApi())
            .doOnNext(s -> appDataBase.patientDao().saveAll(s));

}

我不知道该怎么做。我感谢任何帮助。

终于可以解决我的问题了。

public Flowable<List<Patient>> getPatient(){
   return getPatientFromlocal()
            .take(1)
            .filter(list -> !list.isEmpty())
            .switchIfEmpty(
                    Flowable.defer(() -> getPatientFromApi()));
}

public Flowable<List<Patient>> getPatientFromlocal(){
    return appDataBase.patientDao().listPatient();
}

public Flowable<List<Patient>> getPatientFromApi(){
    String token = preferences.getValue(SDConstants.token);
    return apiNetwork.getPatients(token).map(new Function<ResponsePatient, List<Patient>>() {
        @Override
        public List<Patient> apply(ResponsePatient responsePatient) throws Exception {
            return PatientMapper.transform(responsePatient);
        }
    }).doOnNext(new Consumer<List<Patient>>() {
        @Override
        public void accept(List<Patient> patients) throws Exception {
            appDataBase.patientDao().saveAll(patients);
        }
    });
}