为SQLITE数据库实现递归函数

时间:2018-03-06 06:44:53

标签: android database performance sqlite android-sqlite

我正在将lat-longs从本地数据库同步到服务器,并在用户按下按钮时,如果lat-longs与服务器成功同步,则更改本地数据库表中行的状态。

问题

按下按钮时,我点击了API,将lat-long同步到服务器。

  1. 如果互联网很慢,我会丢失一些很长的时间(我想按照确切的顺序发送所有lat-long。如果错过任何lat-long,我会再次尝试发送丢失的信息。)
  2. 如果所有lat-longs成功同步,则会调用[ { quarter: 'Q1', period: 'P1', start_date: '1/1/2018', end_date: '1/14/2018' }, { quarter: 'Q1', period: 'P2', start_date: '1/15/2018', end_date: '1/21/2018' }, { quarter: 'Q2', period: 'P3', start_date: '2/1/2018', end_date: '2/14/2018' }, { quarter: 'Q2', period: 'P4', start_date: '2/15/2018', end_date: '2/21/2018' } ]
  3. 这是按下按钮时的代码。

    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
    

    用于将lat-long上传到服务器

    EndRide Api

1 个答案:

答案 0 :(得分:0)

您的实施中存在一些问题。

  • 您正在通过在while循环内调用服务器的外部API来保存从数据库表中获取的lat-long。这是一个非常糟糕的实现,因为当您尝试使用API​​服务调用保存每个lat-long时,这会在后台创建大量AsyncTask
  • 更清洁的实现需要在后端服务器中进行开发,该服务器应该将lat-long作为批处理(即一次保存一堆lat-long)。在此实现中,您可以通过调用API服务一次来保存您的lat-long,而不是为每个条目多次调用它。
  • driverEndRideAsync(activity, abc, abc, 0, abc);函数调用移到try块中,以便在使用API​​将lat-long数据发送到服务器时从该块中获取异常时不会执行该函数服务。
  • 如果你在服务器端保留这个确切的实现,那么我建议你有一个后台服务,它将检查在一段时间后是否有任何数据可以与数据库表中的服务器同步。在这种情况下,即使在将数据与服务器同步时出现异常,也会使数据同步,因为最终后台服务将检测未同步的数据并将它们与服务器应用程序同步。

希望有所帮助。