簡體   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