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

标签 java android mvp android-room

我正在尝试在我的项目中实现 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);

但我没有上下文...

你能帮我吗?

最佳答案

有一个talk关于Fragment(Google I/O 2016),据此

Fragments are part of the ? in MV?

(大约 9:30 分钟)只要 Fragment 附加到 Activity,它们就有一个 Context

有趣的观点。

但是,如果您坚持拥有一个无 Android 的 Presenter,那么可以使用一个界面(或两个):

演示者需要一个接口(interface) - 我们称之为ViewInterface - 与FragmentActivity或它所属的View。如果没有这个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();
    // ...

}

关于java - 我如何从 Presenter (MVP) 初始化 Room 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48307561/

相关文章:

java - 一起使用@Spy 和@Autowired

java - GWT 应用程序加载时间

html - 在 gwt 中使用 html 模板

c# - MVP 被动 View ——保持 View 数据和模型数据分离

java - MVP GWT 项目中的页眉/页脚

java - java.util.Set.addAll() 方法中的问题

Java泛型方法继承

android - 具有 Doze 电池优化功能的 Spotify Android SDK

android - 如何在纸牌游戏中使用网格布局

android - 如何初始键盘以大写字母开头,当再次按点时在软键盘中以大写字母开头