如何从 Android 中的工作人员 class 访问我的 Rooms 数据库的存储库?

How can I access my Rooms database's Repository from a Worker class in Android?

我在我的应用程序中有一个 Worker class,我想从我的房间数据库中获取数据。由于我使用的是 MVVM 架构,我如何使用 Worker class 中的存储库从数据库中获取数据?

代码-

工人class

public class SendNotification extends Worker {


    public SendNotification(@NonNull Context context, @NonNull WorkerParameters workerParams) {
        super(context, workerParams);
    }

    @RequiresApi(api = Build.VERSION_CODES.M)
    @NonNull
    @Override
    public Result doWork() {

        String flightnumber = getInputData().getString("flight");
        String date = getInputData().getString("date");
       

        sendNotification(flightnumber,date);

        return Result.success();

    }}

存储库

public class FlightRepository {

    private FlightDao flightDao;
    private LiveData<List<Flight>> allFlights;

    public FlightRepository(Application application) {
        FlightDatabase database = FlightDatabase.getInstance(application);
        flightDao = database.flightDao();
        allFlights = flightDao.getAllFlights();

    }

    public void insert(Flight flight) {
        new InsertFlightAsyncTask(flightDao).execute(flight);
    }

    public void update(Flight flight) {
        new UpdateFlightAsyncTask(flightDao).execute(flight);
    }

    public void delete(Flight flight) {
        new DeleteFlightAsyncTask(flightDao).execute(flight);
    }

    public void deleteAllFlights() {
        new DeleteAllFlightsAsyncTask(flightDao).execute();
    }

    public LiveData<List<Flight>> getAllFlights() {
        return allFlights;
    }

    public Flight getFlight(String flightNumber, String date){
        return flightDao.getFlight(flightNumber,date);
    }

    public boolean existsFlight(String flightNumber, String date){
        return flightDao.existsFlight(flightNumber, date);

}

您应该能够在 Worker:

中创建 FlightRepository 的实例
public class SendNotification extends Worker {

  private FlightRepository flightRepo;


public SendNotification(@NonNull Context context, @NonNull WorkerParameters workerParams) {
    super(context, workerParams);
    this.flightRepo = new FlightRepository(context)
}

@RequiresApi(api = Build.VERSION_CODES.M)
@NonNull
@Override
public Result doWork() {

    String flightnumber = getInputData().getString("flight");
    String date = getInputData().getString("date");
   
    // Do what is needed with flightRepo

    sendNotification(flightnumber,date);

    return Result.success();

}}

这里做一些假设。我会重构 FlightDatabase 以接受 Context,而不是 Application。我不确定为什么数据库需要访问 Application