我正在尝试在我的项目中实现Room数据库,但我遇到了问题。 我正在使用MVC模式,在演示者中,我想初始化房间数据库。但要做到这一点,我需要一个上下文,主持人不应该有。我做错了什么?
我的房间DB:
@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);
但我没有上下文......
你能帮我吗?
答案 0 :(得分:-1)
有talk个Fragment
s(Google I / O 2016),据此
片段是?的一部分?在MV?
(大约9:30分钟)Fragment
只要附加到Context
,Activity
就会有Android
。
一个有趣的观点。
但是如果有人坚持要有interface
免费的演示者,那么可以使用interface
(或两个):
演示者需要ViewInterface
- 让我们称之为Fragment
- 与其所属的Activity
或View
或ViewInterface
进行通信。没有这个ViewInterface
,“真实世界”就不会发生任何事情。
数据库(作为物理存储数据和访问存储数据的一种方式)是这个“现实世界”的重要组成部分,因此Presenter要求其interface
使某人或某事实例化是恰当的。数据存储设施,请返回另一个DatabaseInterface
,以便Presenter可以导致所有CRUD操作发生。我们称之为interface
。
基本上,你有两个Fragment
。第一个可以通过View
或interface ViewInterface{
// ...
DatabaseInterface getDatabaseInterface();
}
interface DatabaseInterface{
void insertNewCustomer(Customer customer);
void deleteCustomer(long customerDbId);
List<Customer> findAllCustomers();
// ...
}
第二个可以由另一个类实现,然后该类将管理数据库操作
class UserProfile(AbstractBaseUser):
is_verified = models.BooleanField(default=True)
current_profile = models.ImageField(default=static('img/default_profile.jpg'))
ratings = models.ManyToManyField(Video, through='UserProfileVideoRating', related_name='ratings')
views = models.ManyToManyField(Video, through='UserProfileVideoView', related_name='views')
CommentRating = models.ManyToManyField(Comment, through='UserProfileCommentRating', related_name='CommentRating')
subscriptions = models.ManyToManyField(User)