android - 从网络服务读取数据、解析数据并将其插入 SQLite 数据库的推荐方式/顺序

标签 android android-service android-sqlite android-webservice

我要开始提到我是 Android 的新手,我刚刚读完一本快速的介绍性书籍,现在我必须实现我的第一个应用程序。 该应用程序将用于接受订单。在我要存储在本地数据库中的所有数据中,有两个表是最重要的:Customers 和 Articles,后者是所有表中最大的(大约 20000 条记录) 我的应用程序中的主要流程之一是,当用户按下启动设备日常操作的按钮时,获取我的应用程序离线工作所需的所有数据。

嗯,这个过程包括以下步骤:

一个。读取 restful 服务以检索客户数据
b.解析对 Json 对象的响应
C。将这些客户插入客户表
d.读取 restful 服务以检索文章数据
e.解析对 Json 对象的响应
F。将这些文章插入文章表

这是我计划要做的:

  1. 编写一个帮助程序类来处理所有 HTTP GET 请求。然后在我需要下载所有客户和文章数据时调用此类
  2. 由于所有这些过程可能会花费很多时间,所以我需要在后台进行。因此,根据一些建议,我将把所有这些代码放在绑定(bind)服务中。
  3. 虽然所有这些长时间的处理都在后台进行,但我必须显示某种指示器(ProgressDialog)这就是我选择使用绑定(bind)服务的原因

虽然我认为我已经对如何单独完成大部分这些事情有了大致的了解,但我认为将所有这些放在一起是完全不同的事情。

所以这些是我现在必须将拼图放在一起的问题:

  1. 您认为我执行所描述流程的所有 6 个步骤的顺序是否正确/有效?如果您必须做出一些改变,您会改变什么?
  2. 如果启动服务的 Activity 被明确取消或被另一个 Activity 隐藏,服务必须有办法让用户知道该过程已经完成。我该如何实现?
  3. 是否可以/建议在服务中写入 SQLite 数据库?这与我在 Activity 中这样做是否相同?
  4. 在 J2ME 中,我做过类似的事情,当我输入类似于上面提到的 6 个步骤时,所有这些步骤都按顺序执行,即一个接一个地执行。在 Android 中是否相同?

希望我没有问太多问题。我只是将它们放在一起,因为它们都是相关的。

基本上,在这个问题中,我不是在要求工作代码(尽管如果您能提供一些示例代码就可以了),我真正想要的是一些建议,一些指导。像“嘿,我认为这可能对你的第 3 点有帮助”“你可能会发现这篇文章有用”“我认为你最好停止使用这个而不是那个”。那种事。

我决定来找你,因为你是专家,我真的需要有人指导我正确的方向。

非常感谢。

附言请不要关闭此问题,如果您认为我需要更改某些内容,请告诉我,我会这样做。

最佳答案

I decided to come to you because you're the experts

首先我不是专家还有我不是知识渊博你可以找到比我更多的专家,但这是我的观点 希望能给你一些帮助

首先忘记使用 AsyncTask 来下载,因为它必须用于短期后台作业,不像你的那样我认为你要下载的文件量非常大。(我认为是这样)

检查谷歌的 downloadmanager 看看它是如何工作的它可能对你有帮助。

http://developer.android.com/reference/android/app/DownloadManager.html

http://blog.vogella.com/2011/06/14/android-downloadmanager-example/

如果您想使用服务,请使用未绑定(bind)服务,因为您不希望该服务在用户关闭应用程序时被android 或用户销毁,对吗?我想你想以任何方式获取你的数据。

为了提高效率,我推荐以下步骤:

一个。读取 restful 服务以检索客户数据

当您获得客户数据时:

  • 创建另一个服务或线程来读取 restful 服务以检索文章数据

  • 在您的旧服务或线程上解析对 Json 对象的响应

现在您有 2 个并发运行的服务或线程,因此请在每个服务或线程上执行明显的insert parse 等步骤。

为什么我不合并 a 和 d?因为我认为用户不喜欢在下载进度条后面等待太多时间。

为了将数据插入数据库,请使用transaction,我建议您使用:

http://greendao-orm.com/

对于数据库,它比其他的ORM 更高效,并且您可以从数据库实现中解脱出来。

If the activity that started the service is explicitly cancelled or is hidden by another activity, the service has to have a way to let the user know that the process has finished. How could I implement that?

使用通知:

http://developer.android.com/training/notify-user/build-notification.html

http://www.tutorialspoint.com/android/android_notifications.htm

http://www.vogella.com/tutorials/AndroidNotifications/article.html

While all this long processing is taking place in the background I'll have to show some sort of indicator (a ProgressDialog) This is the reason I opted for using a Bound Service`

how can I update the UI from an Unbound Service?`

使用 LocalBroadCastManager,或者通常使用 BroadCastReciever

Android update activity UI from service

In J2ME I've done something similar, and when I put something like the 6 steps I mentioned above all of them are executed sequentially, that is , one after the other. Is it the same in Android?

这取决于您的步骤,如果您遵循我的想法,您将同时运行,如果您按照您的想法运行,您将顺序运行

祝你好运。

关于android - 从网络服务读取数据、解析数据并将其插入 SQLite 数据库的推荐方式/顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25598696/

相关文章:

java - 我怎样才能在Android中解析这个JSON?

android - Firebase 动态链接工作但不显示图像 Android

android - 调用 onTaskRemoved 时如何防止服务停止?

今天是 Android SQLite

android - 软键盘未显示在 AlertDialog 中

android - ClassNotFoundException 和 BIND_EXTERNAL_SERVICE 并与 Android WebView 一起崩溃

android - PhoneStateListener 超出了 Android 11 上允许的注册监听器数量

android - 每分钟更新一次的电池高效 android 小部件

android - 将数据插入到 SQLite android 中的外键表中

android - SQLite Insert Query 修剪 0 作为插入字符串的第一个字符