我有 HomeActivity
带有底部导航栏和5个片段的活动。我想用 RoomDatabase
在所有这些碎片中。我如何实现它?
家庭活动代码:
public class HomeActivity extends AppCompatActivity {
TextView tvDailyGoalValue;
SharedPreferences sharedPreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
//layout setting
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
BottomNavigationView navView = findViewById(R.id.nav_view);
AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
R.id.navigation_home, R.id.navigation_profile, R.id.navigation_notifications)
.build();
NavController navController = Navigation.findNavController(this, R.id.fragment3);
NavigationUI.setupWithNavController(navView, navController);
sharedPreferences = getSharedPreferences("MyPrefs", MODE_PRIVATE);
RoomDB roomDB = Room.databaseBuilder(this, RoomDB.class,"dripDB").build();
}
}
2条答案
按热度按时间q1qsirdb1#
我并不是说androidroom的使用是或者应该是复杂的,但是,绝对不是你想象的那么简单;看看你的例子。android开发者花了很多时间试图学习如何使用android架构组件和dagger2使他们的应用程序尽可能好,顺便说一句,这是google推荐的与android room一起使用的api。不过,我还是要回答你的问题。
1.实体
决定要在数据库中使用哪些实体。假设我们这里只有一个实体。比如:
2.道类
像这样创建dao类:
3.数据库类
在单独的类中创建数据库(例如,appdatabase.java)下面是一个好的数据库类的外观:
4.活动和片段
活动
你可以为你的所有活动做同样的事情。
片段
您可以对所有片段执行相同的操作。
vdzxcuhz2#
您应该为roomdb对象创建一个全局可访问的示例。医生甚至说:
如果应用程序在单个进程中运行,那么在示例化appdatabase对象时应该遵循单例设计模式。每个roomdatabase示例都相当昂贵,您很少需要在一个进程中访问多个示例。
有多种方法可以跨多个活动和片段共享单个对象,例如:
使用匕首和配置
@Singleton
你能做到的@Inject
在所有相关的活动和片段中。如果你是第一次使用匕首的话,设置匕首有点复杂,但是在专业应用程序中这是通常的选择。使用经典的java单例设计模式并转换
RoomDB
一个单身汉。使用自定义
Application
子类,把RoomDB
示例并将其暴露给任何Context
,例如。((YourCustomApplication)context.getApplication()).getRoomDB()
我认为你最好的选择是1)可扩展性或2)简单性。