有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我如何从Android中的Worker类访问我的Rooms数据库的存储库?

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

密码-

工人阶级

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);

}


共 (1) 个答案

  1. # 1 楼答案

    您应该能够在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