我想开发一个Xamarin Forms应用程序。它将有一个SQLite数据库,我希望在iOS和Android上提供它。数据库将使用来自云上的SQL Server数据库的数据填充初始种子数据。我想这将是大约500行数据,每行大约1Kb。
我不明白的是何时以及如何填充这个。我是否应该尝试将数据放入CSV文件并在安装应用程序或首次启动时填充数据库?除了使用大量插入语句填充代码中的行之外,填充种子数据的常规方法是什么。
任何有关如何正常工作的帮助或建议(我认为大多数人都是这样做的)将不胜感激。
由于
答案 0 :(得分:12)
让我们解决问题。
您希望在应用中使用的初始数据是否会随着时间的推移而发生变化?
如果您包含任何预先填充的数据(SQLite,Realm或基于CSV的文件,......),并且您所包含的数据会陈旧,您必须更新它例行情况,您需要发布应用程序更新(.apk
/ .ipa
),以便新用户安装接收更新后的数据(更多)在下面这个。)
注意:这假设您当前的用户通过实际运行您的应用获取更新的数据,并且它正在定期处理本地数据更新(后台服务,推送通知,数据轮询等)。 。)
这是通过Ad-Hoc,私人商店和/或iOS企业发布发布的业务线(
LoB
)应用程序吗?
如果您控制用户群,则必须强制进行更新安装,以便用户获取新的/更新的预先填充的数据可能是一种可接受的方法,但如果他们被迫更新应用程序,则无法获得良好的用户体验时间......但它确实有效......
此应用程序是否将通过公共Apple和Google App Stores分发?
在这里,您需要非常小心应用程序中包含的预填充数据。
如果数据过时,您需要将更新的应用版本推送到商店以进行新的安装安装,提防可能需要几天(或几周甚至一个月+)来获取新版本应用程序进入商店。
Play商店通常在发布应用更新时不到24小时,而Apple Store可能相同,不要赌它。
我们经常看到48-72小时的延迟并随机被拒绝,因此可能需要一周或更长时间才能将更新应用程序带入Apple Store。我们拒绝推迟应用更新超过一个月,并已进入申诉流程,甚至已删除现有功能以重新发布
注意:Apple商店的每次应用更新都会重置您的用户评论...: - (
底线:您希望在修复错误和/或添加功能时发布到商店,不更新某些"静态&# 34;存储在您的应用包中的数据......
这些数据成本您的最终用户是什么?
作为应用开发者,您的负面成本是糟糕的评论和卸载。看看这个"数据"影响最终用户访问您的应用程序以及他们的反应方式。下载时间较长,通常可以接受。更长的初始app启动时间,不太可接受......等等....
您的应用将使用哪些市场?全球许多市场的网络速度和数据传输成本都很慢且成本高昂......
数据的真实大小究竟是什么?
我"预先填充"一个领域有数千行的Realm数据实例,其中包含5MB的JSON数据。 SQLite需要更长时间,但它仍然不错。数据本身以zip格式存储并作为静态文件(基于https的get)访问,并且在80%压缩因子下,使用LTE蜂窝数据在1秒内从服务器(AWS S3)提取1MB压缩数据加速并将其解压缩为流,同时在运行时反序列化JSON以更新Realm实例再添加一个......
因此,用户影响非常小,而且我隐藏了#34;这个初始的预填充更新通过首次欢迎屏幕和一些用户希望在进入第一个"真实"之前阅读的文本。应用程序屏幕...
注意:假设用户在首次打开应用时将拥有网络数据访问权限......在全球许多市场中,情况并非如此,因此请将此考虑在内应用程序设计。
我还构建了应用程序,因此它的数据可以在启动时在后台线程上更新(最初的一个或不是),因此用户不会站在那里看着旋转繁忙的指标,他们至少可以与数据交互他们确实有。
那么您应该在应用包中添加任何预先填充的数据吗?
当然,当数据绝对需要让用户尽快启动并运行以增强用户体验时。游戏就是一个很好的例子,可以通过.obb
...将各种级别,媒体文件等捆绑到100兆字节甚至千兆字节到应用程序中,这样用户就不会经历10+分钟。第一次打开应用程序时等待。
现在这意味着他们的初始安装下载时间更长,因为数据捆绑在应用程序中,整体用户体验更好,因为用户接受下载/安装时间并将其视为运营商/电话/服务计划问题与第一次真正进入功能屏幕时打开应用程序的时间。
那又怎么样?
我个人会根据具体情况来看这个问题。我查看数据,如果它不会改变并且只是被添加到并且可能随着时间的推移被修剪,请将其包含为预先填充的SQLite或Realm存储或...为什么导致用户等待Web请求,数据库更新以及额外的网络数据使用和相关成本。如果数据过时,请不要将其捆绑在您的应用中。
关于安装预先填充数据的机制:
请参阅我对这个问题的答案" Bundle prebuilt Realm files"
答案 1 :(得分:6)
每次更新应用程序时都不必创建sqlite数据库。
实际上SQLiteOpenHelper
提供了以下两种方法:
OnCreate()
:您应该实现此方法并使用来自服务器的填充数据创建sqlite数据库。当您第一次启动应用程序时调用它。 OnUpgrade()
:如果要修改数据库(在表中添加新表或列)或填充其他数据,则应实现此方法。数据库在应用更新之间保留,您不需要每次都创建它。
检查以下示例,这些示例解释了如何在Xamarin中使用sqlite数据库:
<强> Using Sqlite in a Xamarin.Android Application Developed using Visual Studio 强>
和