我的应用小部件使用数据库,并在资源目录中预先加载,活动会在首次运行时将其复制到数据库目录。
但是如果在此之前插入了widget,则会抛出异常,因为数据库尚不存在。
是否有文件的小部件检查,如果它不存在,从资产中获取并复制它而不是活动?!?
答案 0 :(得分:1)
我真的推荐using SQLiteAssetHelper
for packaging databases in an app。然后,您可以正常使用getReadableDatabase()
/ getWriteableDatabase()
,SQLiteAssetHelper
将根据需要透明地从资产中解压缩数据库。
话虽如此,如果您确定自己想要这样做,请拨打getAssets()
Context
传递到onUpdate()
的{{1}}。
请注意,在主应用程序线程上调用AppWidgetProvider
的{{1}},就像您(希望)在后台线程中执行活动数据库I / O一样,您应该这样做为您的应用小部件。应用小部件的典型解决方案是让工作由onUpdate()
启动的AppWidgetProvider
完成。