Android 片段上的SQLite初始化
我只是阅读,因为我需要获取一个上下文来初始化数据库。使用Android 片段上的SQLite初始化,android,sqlite,android-fragments,Android,Sqlite,Android Fragments,我只是阅读,因为我需要获取一个上下文来初始化数据库。使用Fragment#getActivity()获取Context或在Fragment#onAttach(Activity)回调方法中进行操作的两个得票最多的答案 问题是,为了维护一个有良好文档记录的代码,我希望避免使用“替代”方式,而是按照预期的方式进行操作 从这里找到的片段生命周期判断:似乎在onCreate之前调用了onatach(),这意味着getActivity()此时不应返回null 问题是: 它是用来初始化onAttach()中的
Fragment#getActivity()
获取Context
或在Fragment#onAttach(Activity)
回调方法中进行操作的两个得票最多的答案
问题是,为了维护一个有良好文档记录的代码,我希望避免使用“替代”方式,而是按照预期的方式进行操作
从这里找到的片段
生命周期判断:似乎在onCreate
之前调用了onatach()
,这意味着getActivity()
此时不应返回null
问题是:
onAttach()中的数据库的吗
onCreate()
内部调用getActivity()
时,即使已经调用了onAttach()
,getActivity()是否可能返回null
似乎您最好在正确的时间创建一个待办事项设置。这使您可以通过内容解析器从任何地方轻松访问数据库。要初始化数据库,
ApplicationContext
就足够了
您可以创建自己的应用程序子类,如下所示(您还必须在清单中定义它)
然后,您可以在需要应用程序上下文的任何地方调用MyApp.context()
在您的舱单中:
<application android:name="MyApp"/>
我真的不明白你为什么要这样做。从应用程序
实例中调用getApplicationContext()
基本上与使用this
@Squonk完全相同。我可以在非从活动调用时使用这种方法,我可以在任何类中使用这种方法。或者您的意思是getApplicationContext与Application.this相同。我从来没有想过,getApplicationContext()似乎更明确。许多地方需要活动上下文,所以应用上下文没有用处。即使忽略这一点,创建一个静态方法来做事情也违反了OO原则,正如Squank所提到的,getApplicationContext()exists@Nick卡多佐,请你详细说明一下它是如何违反OO原则的好吗?@Alex:(继续说,跑出了房间)。另一个附带说明是,正如Nick所建议的,在某些情况下,您必须使用活动上下文(尽管正如您在回答中所说的,应用程序上下文对于DB内容是合适的)。您可能需要活动上下文的原因是应用程序上下文只是部分上下文,对于许多与UI相关的任务来说根本无法正常工作(应用程序没有UI,也不知道UI需要什么)。+1因为我喜欢使用CP。。。附加值也将是:CP与加载程序兼容,通过CP添加数据,您不必担心ListView刷新-它将自动完成:)创建ContentProvider可能是一件不必要的琐事。问题是关于上下文而不是ContentProvider。您解决了这个问题吗?您是否有更好的答案可以添加,或者您是否可以接受另一个答案来结束此问题并将其从未回答的android列表中删除,谢谢!是的,我最终使我的数据库成为一个Singletοn
,这样ViewPager
中的每个片段都具有相同的连接。然后我在我的应用程序#onCreate()
子类中初始化了它。您可以回答自己的问题-您应该做的只是整理未回答的列表
<application android:name="MyApp"/>