【问题标题】:Suggestion on copying data from server database to android device sqlite关于将数据从服务器数据库复制到android设备sqlite的建议
【发布时间】:2015-07-15 04:57:58
【问题描述】:

我正在为销售人员开发一款 Android 应用,以便他们使用设备保存订单。具体来说,每天早上,销售人员都会去办公室获取当天的数据。

目前,我可以通过向php 文件发送请求来获取数据,并且像通常的做法一样,我们将这些数据插入到Android 中的sqlite 中,以便它可以离线工作。但是,使用当前方法,设备需要 6-8 秒来获取数据并将这些数据插入到sqlite。随着数据变大,我认为它会变慢。我发现将数据插入sqlite 的过程需要相当长的时间。

所以,我一直在考虑将销售员所需的所有数据转储到sqlite 文件中,这样我就可以只发送我认为效率更高的那个文件。你能指导我如何做到这一点吗?或者有没有其他更有效的方法来解决这个问题?

注意:

  • 服务器数据库:Mysql
  • 服务器:PHP

【问题讨论】:

  • 只发送那些新的行?
  • 不,因为每天早上销售员都会去办公室取当天的数据。如果我可以选择要发送到设备的表格和字段,那就太好了。
  • 如果您想让它完全自动化,请尝试使用内容提供者同步适配器。这就是 Gmail 使用的。不利的一面是,您还必须使用 Account Manager。没有它,其他两个将无法工作。
  • 目前我也面临同样的问题,如果你尝试使用bumping方法,它也会像web api sync一样花费更多时间
  • 使用事务在 SQLite 中插入数据,如果你还没有的话。那是批量插入。

标签: php android mysql sqlite


【解决方案1】:

你可以在这里做不同的方法来实现加载速度:

  1. 如果你的数据可以用apk预加载,你可以把它们存储在.apk里面,当用户下载应用程序时,它就会在那里,你只需要调用剩余的更新数据。

  2. 如果您每次都需要刷新数据,您可以在多次调用中从服务器调用数据块,这将在数据库中获取和存储数据并在 UI 上更新。

  3. 如果数据不是太多,(我说如果有200-300个数据,我们不应该考虑太多)你可以做简单的事情: 当您调用网络调用获取数据时,您应该将该数据对象传递给数据库进行存储,同时(在存储到数据库之前),只需将整个列表对象返回给 Activity/Fragment,这样它就会有数据并且您可以向用户查看这些数据,同时,它将存储在数据库中。

此外,您可以在侧 sqlite 中使用 no-sql,因此您不需要每次都解析对象(与 no-sql 相比成本高)并将所有数据作为整个对象存储在 sql 中,并且在需要时,只需从 db 中获取并根据需要进行解析。

【讨论】:

    【解决方案2】:

    感谢@Skynet 提到交易,它确实改善了流程。所以我现在会继续使用这种方法..

    你可以这样做:

    db.beginTransaction();
    try {
        saveCustomer();
        db.setTransactionSuccessful();
    } catch {
        //Error in between database transaction 
    } finally {
        db.endTransaction();
    }
    

    更多解释:Android Database Transaction..

    【讨论】:

      猜你喜欢
      • 2015-08-05
      • 2016-05-23
      • 2011-08-26
      • 1970-01-01
      • 2016-09-07
      • 1970-01-01
      • 2016-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多