繁体   English   中英

我如何从Presenter(MVP)初始化Room数据库

[英]How can i initialize Room database from Presenter (MVP)

我正在尝试在我的项目中实现Room数据库,但是我遇到了问题。 我正在使用MVC模式,并且在演示者中,我想初始化会议室数据库。 但是要做到这一点,我需要一个演示者不应该拥有的上下文。 我做错了什么?

我的房间数据库:

@Database(entities = {SportEvent.class},version = 1)
public abstract class RecommendedEventsDB extends RoomDatabase {

    private static RecommendedEventsDB INSTANCE;

public abstract SportEventDao sportEventDao();

//singleton instance of database
public static RecommendedEventsDB getRecommendedEventsDB(Context context){
    if(INSTANCE == null) {
        INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
                RecommendedEventsDB.class, "recommended_Events")
                .allowMainThreadQueries() //need to be deleted, for testing purpose only!!!
                .build();
    }
    return INSTANCE;
    }
}

在Presenter中,我想启动数据库:

RecommendedEventsDB db = RecommendedEventsDB.getRecommendedEventsDB(context);

但我没有上下文...

你能帮我吗?

有一个谈话有关Fragment根据其S(谷歌I / O 2016)

碎片是吗? 在MV中?

(大约在9:30分钟。)并且Fragment确实具有Context ,只要它们附加到Activity

一个有趣的观点。

但是,如果有人坚持要使用没有Android Presenter,则可以使用一个(或两个) interface

演示者需要一个interface -我们将其ViewInterface与它所属的FragmentActivityView进行通信。 没有这个ViewInterface ,在“现实世界”中什么也不会发生。

数据库(作为物理存储数据和访问存储的数据的一种方式)是这个“真实世界”的很大一部分,因此仅适合于Presenter要求其ViewInterface使某人或某事实例化数据存储工具,请来返回另一个interface以便Presenter可以使所有CRUD操作发生。 我们将此称为DatabaseInterface

因此,基本上,您有两个interface 第一个可以通过FragmentView

interface ViewInterface{
    // ...        


    DatabaseInterface getDatabaseInterface();
}

第二个可以由另一个类实现,该类然后将管理数据库操作

interface DatabaseInterface{
    void insertNewCustomer(Customer customer);
    void deleteCustomer(long customerDbId);
    List<Customer> findAllCustomers();
    // ...

}

暂无
暂无

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

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