[英]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
與它所屬的Fragment
或Activity
或View
進行通信。 沒有這個ViewInterface
,在“現實世界”中什么也不會發生。
數據庫(作為物理存儲數據和訪問存儲的數據的一種方式)是這個“真實世界”的很大一部分,因此僅適合於Presenter要求其ViewInterface
使某人或某事實例化數據存儲工具,請來返回另一個interface
以便Presenter可以使所有CRUD操作發生。 我們將此稱為DatabaseInterface
。
因此,基本上,您有兩個interface
。 第一個可以通過Fragment
或View
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.